Apakah dapat diterima untuk mendeklarasikan objek baru (dan mengembalikannya) dari dalam objek yang sama, seperti dalam contoh di bawah ini?
Atau, lebih baik memindahkannya ke semacam handler
kelas?
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
//Gets a list of persons
public List<Person> GetPersons()
{
List<Person> _listPersons = new List<Person>();
Person _person = new Person();
_person.Name = "FooFii";
_person.Age = 50;
_listPersons.Add(_person);
return _listPersons;
}
}
programming-practices
AsusT9
sumber
sumber
GetPersons
menjadi statis atau bukan anggota Person. Saat ini Anda perluPerson
meneleponGetPersons
Object
kelas Java (akar hierarki kelas) secara eksplisit mengamanatkanclone()
metode yang dimaksudkan untuk menyediakan salinan objek.Jawaban:
Secara umum, ya tidak apa-apa . Secara umum konstruktor suatu kelas adalah tempat semua pengaturan yang diperlukan agar kelas berfungsi. Seringkali sebagian dari pengaturan itu diabstraksi ke area kode yang lain. Misalnya pola pabrik memindahkan banyak pengaturan awal ke kelas lain sehingga pengaturannya jelas dipisahkan dari logika.
Dalam contoh spesifik Anda, itu tidak masalah . Mungkin karena contoh Anda dibuat tetapi Anda menyatukan data dan logika. Anda menyatakan seperti apa rupa seseorang dan memberi saya metode bagaimana mendapatkan orang tertentu. Ada baiknya melihat Prinsip Tanggung Jawab Tunggal . Dalam contoh Anda, saya akan memiliki satu kelas sederhana yang mendefinisikan tipe data Orang, sebuah repositori yang membuat orang dan kelas yang membuat orang keluar dari repositori dan kemudian melakukan sesuatu dengan data (yaitu mengirim email kepada mereka)
sumber
Ya, dalam kondisi yang tepat.
Contoh umum adalah komposisi filter. Di sini, Anda membuat filter baru dengan memanggil metode pada filter yang lebih lama.
Contoh buatan:
Ini memungkinkan penggunaan seperti
Ini agak bagaimana chaining selector jQuery bekerja, dan bagaimana querysets Django bekerja.
sumber
Alih-alih melakukannya dengan cara ini, saya akan mencoba menerapkan sesuatu seperti versi yang lebih dienkapsulasi dari pola pabrik. Miliki objek terpisah yang membuat daftar. Lihat Pabrik (pemrograman berorientasi objek) .
Anda pada dasarnya sudah melakukan pola pabrik ketika Anda mengembalikan daftar
Person
, tetapi Anda mungkin ingin memiliki dua kelas yang terpisah. Jika Anda memisahkan pabrik dari produk , penerapan AndaPerson
tidak akan terikat ke dalam kelas Anda yang membuat daftar (yaituPersonFactory
).Jika Anda melihat tautan di atas, Anda akan melihat bahwa contoh yang serupa dengan milik Anda sebenarnya diposting di bawah bagian nama deskriptif . Namun, untuk alasan di atas saya tidak akan melakukannya dengan cara ini. Lihat bagian Enkapsulasi (juga di tautan).
sumber
Saya dapat memberikan contoh dan tidak salah untuk mengembalikan objek bertipe sama dalam tipe yang sama.
Pertimbangkan ini.
Ada garis tipis antara pemisahan atau pencampuran masalah. Jika Anda menemukan diri Anda di sisi lain dari garis itu, Anda dapat menggunakan manajer / penangan / ... jenis objek.
sumber