Bir işletmenin tek sorumluluğu (değişim nedeni), kendisini benzersiz bir şekilde tanımlamak, diğer bir deyişle sorumluluğunun anlaşılabilir olması olmalıdır.
Eric Evan'ın DDD kitabı, sf. 93:
İşletmelerin en temel sorumluluğu, davranışın açık ve öngörülebilir olabilmesi için süreklilik sağlamaktır. Yedek tutulursa bunu en iyi şekilde yaparlar. Özniteliklere ve hatta davranışa odaklanmak yerine, Entity nesnesinin tanımını en içkin özelliklere, özellikle onu tanımlayan veya bulmak veya eşleştirmek için yaygın olarak kullanılan karakterlere ayırın. Yalnızca bu davranış için gerekli olan kavram ve öznitelikler için gerekli olan davranışı ekleyin.
Bunun ötesinde, temel Varlık ile ilişkili diğer nesnelere davranış ve nitelikleri kaldırmaya bakın. Kimlik sorunlarının ötesinde, Varlıklar sahip oldukları nesnelerin işlemlerini koordine ederek sorumluluklarını yerine getirme eğilimindedir.
1.
... ENTITY nesnesinin tanımını, özellikle onu tanımlayan ya da onu bulmak ya da eşleştirmek için yaygın olarak kullanılanlar olmak üzere, en içsel özelliklere ayırın. Yalnızca kavram için gerekli olan davranışı ekleyin ...
Bir varlığa benzersiz bir kimlik atandığında , kimliği oluşturulur ve bu nedenle böyle bir varlığın kimliğini korumak veya kendini tanımlamasına yardımcı olmak için herhangi bir davranışa ihtiyaç duymadığını varsayarım . Böylece, ben ne tür davranışların yazar (yanında atıfta olduğunu anlamıyorum findve match operasyonlar ) "ile kavramına esastır davranışı "?
2.
... ENTITY nesnesinin tanımını, özellikle onu tanımlayan ya da onu bulmak ya da eşleştirmek için yaygın olarak kullanılanlar olmak üzere, en içsel özelliklere ayırın. ... Bunun ötesinde, çekirdek ENTITY ile ilişkili diğer nesnelere ilişkin davranış ve nitelikleri kaldırmaya bakın.
Yani varlığı tanımlamaya yardımcı olmayan herhangi bir davranış, ama biz yine de bu davranışı o varlığın kendine özgü bir özelliği olarak nitelendiririz (yani havlama köpeklere özgüdür, uçmak uçaklara özgüdür, yumurtlamak kuşlara özgüdür. .), bu varlıkla ilişkili diğer nesnelere konulmalıdır (örnek: havlayan davranışı bir köpek varlığıyla ilişkili bir nesneye koymalıyız)?
3.
Bunun ötesinde, çekirdek ENTITY ile ilişkili diğer nesnelere yönelik davranış ve nitelikleri kaldırmaya bakın.
a) MyEntitydelegeler sorumlulukları A_respve B_respnesnelere ave bsırasıyla.
Çoğu rağmen A_respve B_respçalışma yapılır ave börneklerini, müşteriler hala servis edilir A_respve B_respiçinden MyEntitymüşterinin bakış açısından iki sorumlulukları ait olduğunu, hangi araçlar MyEntity. Böylece, ortalama etmediğini MyEntityde vardır A_respve B_respsorumluluklar ve bu şekilde ihlal SRP ?
b) Bunu varsaysak A_respve B_respait olmasak bile MyEntity, MyEntityhala AB_respnesnelerin ave operasyonlarının koordinasyonundan sorumludur b. Yani SRP'yiMyEntity ihlal etmiyor çünkü en azından iki sorumluluğu var - kendini benzersiz olarak tanımlamak ve ayrıca ?AB_resp
class MyEntity
{
private A a = ...
private B b = ...
public A GetA()
{ ... }
public B GetB()
{ ... }
/* coordinates operations of objects a and b */
public int AworkB()
{ ... }
}
/* A encapsulates a single responsibility resp_A*/
/* A is value object */
class A
{ ... }
/* B encapsulates a single responsibility resp_B*/
/* B is value object */
class B
{ ... }
GÜNCELLEME:
1.
Bu bağlamdaki davranış semantik davranışa atıfta bulunmaktadır. Örneğin, bir sınıftaki bir özelliğinin (yani bir etki alanı nesnesindeki özniteliğin) benzersiz bir şekilde tanımlanması için kullanılan bir davranışı vardır. Bu doğrudan kodda temsil edilmese de. Beklenen davranış, söz konusu özellik için yinelenen değerlerin olmamasıdır.
Bu nedenle, kodda, neredeyse hiçbir zaman gerçekte varlığın kimliğini koruyacak bir davranış (yani bir işlem) uygulamamız gerekmeyecektir, çünkü böyle bir davranışın yalnızca bir etki alanı modelinde (ID özniteliği şeklinde) ancak bu kimlik niteliğini koda çevirdiğimizde, anlambiliminin bir kısmı kaybolur (yani, kimlik değerinin benzersiz olduğundan dolaylı olarak emin olunan kısım kaybolur)?
2.
Ayrıca, Yaş gibi bir mülkün bir Kişi Varlığı dışında bir bağlamı yoktur ve bu nedenle, farklı bir nesneye taşınmak mantıklı değildir ... Ancak bu bilgiler, benzersiz tanımlayıcının ayrı bir yerde kolayca saklanabilir, dolayısıyla davranışa kafa karıştırıcı referans. Yaş tembel bir yük değeri olabilir.
a) AgeÖzellik tembel yüklüyse, anlamsal Ageolarak sadece bir özellik olsa da, buna bir davranış diyebiliriz ?
3.
Adrese özgü, geçerli bir adres olduğunu doğrulama gibi işlemleri kolayca yapabilirsiniz. Bunu tasarım zamanında bilmiyor olabilirsiniz, ancak tüm bu kavram nesneleri en küçük parçalarına ayırmaktır
AgeFarklı bir nesneye geçerek bağlamı kaybedeceğimizi kabul etsem de , DateOfBirthmülkü farklı bir nesneye taşırsak bağlam kaybolmaz , ancak genellikle onu taşımayız.
AddressBaşka bir nesneye taşınmamızın ana nedeni nedir, değil DateOfBirthmi? Çünkü varlık DateOfBirthiçin daha içsel Personya da gelecekte bir yerde belirli operasyonları tanımlamamız gerekebileceğimiz için daha az şans var DateOfBirthmı?
4. Ben hala bilmiyorum söylemeliyim MyEntityda vardır A_respve B_respsorumlulukları ve neden MyEntityde sahip AB_respihlali olarak kabul edilmez SRP
EULERFX
1)
Yazarın bahsettiği davranışlar, varlıkla ilişkili davranışlardır. Bunlar, varlığın durumunu değiştiren davranışlardır
a) Sizi doğru anlarsam, varlığın yalnızca niteliklerini değiştiren davranışları (yani durumunu ) içermesi gerektiğini mi söylüyorsunuz ?
b) Ve varlığın durumunu değiştirmesi zorunlu olmayan , ancak yine de o varlığın içsel bir özelliği olduğu düşünülen davranışlar hakkında (örnek: havlama , bir varlığın değişmemiş olsa bile içsel bir özelliği olacaktır) Köpeğin durumu )? Bu davranışları bir varlığa dahil etmeli miyiz yoksa başka nesnelere mi taşınmalı? Dog
2)
Davranışı diğer nesnelere taşıma konusunda, yazar özellikle değer nesnelerine atıfta bulunmaktadır.
Alıntımda yer almasa da, yazar aynı paragrafta bazı durumlarda davranışların (ve niteliklerin ) diğer varlıklara da taşınacağından bahsediyor (ancak davranışları VO'lara taşımanın faydalarını anlıyorum )
3) varsayarsak MyEntity(soruya bakın 3. benim orijinal sonrası) biz demek olur, SRP ihlal etmez sorumluluk ait MyEntityayrıca oluşan diğer şeyler arasında yer alıyor:
a. A_resp + B_resp + AB_resp ( AB_respnesneleri koordine eder ave b)
veya
b. AB_resp + temsilci seçme A_respve ilişkili B_respnesnelere ( ave b) MyEntity?
4) Eric Evan'ın DDD kitabı, s. 94:
CustomerID, Müşteri ENTITY ürününün tek ve tek tanımlayıcısıdır (şekil 5.5), ancak bir Müşteri bulmak veya eşleştirmek için genellikle telefon numarası ve adres kullanılır. İsim, bir kişinin kimliğini tanımlamaz, ancak genellikle onu belirleme yollarının bir parçası olarak kullanılır.
Bu örnekte, telefon ve adres özellikleri Müşteri'ye taşındı, ancak gerçek bir projede bu seçim, alan adının müşterilerinin tipik olarak nasıl eşleştirildiğine veya ayırt edildiğine bağlı olacaktır. Örneğin, Müşterinin farklı amaçlarla birçok kişi telefon numarası varsa, telefon numarası kimlikle ilişkilendirilmez ve Satış Kişisi'nde kalmalıdır.
a)
CustomerID, Müşteri ENTITY ürününün tek ve tek tanımlayıcısıdır (şekil 5.5), ancak bir Müşteri bulmak veya eşleştirmek için genellikle telefon numarası ve adres kullanılır. İsim, bir kişinin kimliğini tanımlamaz, ancak genellikle onu belirleme yollarının bir parçası olarak kullanılır.
Alıntı, yalnızca kimlikle ilişkili niteliklerin bir varlıkta kalması gerektiğini belirtir . O yazar araçlarını varsayalım varlık sadece bu içermelidir özelliklerini sıklıkla kullanılır bulabilir veya maç bu varlık TÜM diğeri ise, nitelikleri taşınmış olmalıdır?
b) Peki diğer özellikler nasıl / nereye taşınmalı? Örneğin (Buradaki varsayım yani adres niteliği için kullanılmaz bulmak veya maç Customer ve böylece biz taşımak istediğiniz adresi özelliğini dışına Customer):
eğer yerine sahip Customer.Address(Çeşidi string) bir özellik oluşturmak Customer.AddressÇeşidi Addressbiz hareket etmedi, adresi özelliğini (tipidir ilişkili VO nesnesine Address) ya da biz söyleyebilirim Customerhala içeren adres niteliğini ?
c)
Bu örnekte, telefon ve adres özellikleri Müşteri'ye taşındı, ancak gerçek bir projede bu seçim, alan adının müşterilerinin tipik olarak nasıl eşleştirildiğine veya ayırt edildiğine bağlı olacaktır. Örneğin, Müşterinin farklı amaçlarla birçok kişi telefon numarası varsa, telefon numarası kimlikle ilişkilendirilmez ve Satış Kişisi'nde kalmalıdır.
Birçok her varsayarsak, çünkü burada haksız yazar değil mi irtibat numaralarınıCustomer yalnızca o belirli aittir vardır Customer, o zaman ben bu derdim telefon numaraları ile ilişkili kimlik tıpkı olduğu gibi Customersadece vardı bir telefon numarası ?
5)
Yazarın varlığı kaldırmayı önermesinin nedeni, başlangıçta bir Müşteri varlığı oluşturduğunda, onu bir müşteriyle ilişkilendirmeyi düşünebileceği herhangi bir nitelikle doldurma eğilimi olmasıdır. Bu, nihayetinde anemik etki alanı modeline yol açan davranışları gözden geçiren veri merkezli bir yaklaşımdır.
Konu dışı ama düşündüm anemik alanı modeli hareketli sonuçları davranışlarını bir takım varlık senin örneğin bir doldurma iken, varlık ve birçok niteliklerini neden olacaktır, Customerçok fazla sahip davranışı muhtemelen de dahil ediyorum çünkü ( davranışların hangi bu ek özellikleri değiştirebilir ) ve böylece SRP'yi ihlal ediyor musunuz?Customer
Teşekkürler