Kullanıcı, Ürün, Fatura ve Sipariş gibi, modelimde (EF kullanarak) çeşitli öğelerim olduğunu varsayalım.
Uygulamamda varlıkların önceden belirlenmiş kümeye ait olduğu varlık nesneleri özetlerini yazdırabilen bir kullanıcı denetimi yazıyorum, bu durumda Kullanıcı ve Ürün özetlerinin özetlenebileceğini söylüyorum.
Özetlerin hepsi sadece bir ID ve bir açıklama olacak, bu yüzden bunun için basit bir arayüz oluşturun:
public interface ISummarizableEntity {
public string ID { get; }
public string Description { get; }
}
Sonra söz konusu varlıklar için, bu arabirimi uygulayan kısmi bir sınıf oluşturun:
public partial class User : ISummarizableEntity
{
public string ID
{
get{ return UserID.ToString(); }
}
public string Description
{
get{ return String.Format("{0} {1} is from {2} and is {3} years old", FirstName, LastName, Country, Age); }
}
}
public partial class Product: ISummarizableEntity
{
public string ID
{
get{ return ProductID.ToString(); }
}
public string Description
{
get{ return String.Format("{0} weighs {1}{2} and belongs in the {3} department", ProductName, WeightValue, WeightUnit, Department); }
}
}
Bu şekilde kullanıcı kontrolüm / kısmi görünümüm herhangi bir ISummarizableEntity koleksiyonuna bağlanabilir ve kaynakla hiç ilgilenmesi gerekmez. Arayüzlerin veri türü olarak kullanılmaması gerektiği söylendi ancak bundan daha fazla bilgi alamadım. Gördüğüm kadarıyla, arayüzler normalde davranışı tanımlasa da, sadece özellikleri kullanmak kendi içinde bir anti-desen değildir, çünkü özellikler zaten alıcılar / ayarlayıcılar için sözdizimsel şekerdir.
Somut bir veri türü oluşturabilir ve varlıklardan buna eşleyebilirim ama faydasını göremiyorum. Varlık nesnelerini soyut bir sınıftan miras alıp sonra özellikleri tanımlayabilirim ama sonra varlıkları birden fazla mirasa sahip olamayacağımız için daha fazla kullanmaya kilitliyorum. Ayrıca istersem herhangi bir nesnenin ISummarizableEntity olması için açıkım (tabii ki arayüzü yeniden adlandıracağım)
Aklımda kullandığım çözüm sürdürülebilir, genişletilebilir, test edilebilir ve oldukça sağlamdır. Burada anti-paterni görebiliyor musunuz?
EntitySummary
sahip olmakUser
veProduct
her birinin böyle bir yöntemi olmasını tercih etmenizin bir nedeni var mıpublic EntitySummary GetSummary()
?