Wielokrotnie widziałem próby podejścia do DDD na tyle komplikujące całe rozwiązanie, że postanowiłem o tym napisać kilka słów. Mam wrażenie, że świat programistów trochę zachłysnął się modnymi ostatnimi czasy konceptami jak właśnie DDD i wychodzą z tego takie kwiatki jak strach przed ORM, który nie oszukujmy się w przypadku poprawnego zastosowania zaoszczędza sporo pracy. Często mimo nawet nieskomplikowanej domeny programiści celują w stuprocentowo czystą domenę i unikają korzystania z narzędzia, które powoduje
@yhbgrobdoivbvwamsv: faktycznie rozkmin filozoficznych to się w branży zrobiło całkiem sporo, ale w tej sytuacji, którą opisałem nie widzę podobieństwa, bo jeśli o takich sprawach nie powinniśmy gadać i "filozofować" to o czym w takim razie? ( ͡° ͜ʖ ͡°)
@Saly: w tym miejscu chodziło o wrzucanie do projektu skomplikowanego ORMa, a korzystaniu z niego na zasadzie tylko anemicznych modeli i mapowania do bazy, gdzie zamiast tego skomplikowanego narzędzia wtedy już lepiej to mapować właśnie samemu i pchać do bazy za pomocą prostego SQLa, będzie to lepsze
@Saly: w tym miejscu chodziło o wrzucanie do projektu skomplikowanego ORMa, a korzystaniu z niego na zasadzie tylko anemicznych modeli i mapowania do bazy, gdzie zamiast tego skomplikowanego narzędzia wtedy już lepiej to mapować właśnie samemu i pchać do bazy za pomocą prostego SQLa, będzie to lepsze
@croppz: tak jak pisałem w artykule, nawet jakby trzeba było framework zmienić to nie powinno to być straszne, bo jak skorzystamy z Doctrine do zapisu agregatów z DDD to pewnie będziemy mieli tylko zależność do małej paczki doctrine/collections, więc można założyć scenariusz, że paczka będzie nadal rozwijana, a wtedy do np. CycleORM powinno być łatwo przejść.
Warto tylko pamiętać o automatyzacji i jakiejś weryfikacji reguł architektonicznych za pomocą phparch czy
Warto tylko pamiętać o automatyzacji i jakiejś weryfikacji reguł architektonicznych za pomocą phparch czy
@croppz: czyli macie translację agregat DDD -> anemiczna encja ORM -> zapis i odwrotnie przy pobieraniu?
@MQs: chyba też nie do końca o tym samym mówimy, bo ja krytkuję podejście do DDD w taki sposób, że porzucamy ORM całkowicie, albo nie wykorzystujemy go w 100% mimo, że logika jest względnie prosta i nic nam to nie daje. Przykłady są w artykule, który podałem. Separacja domeny i pozostałych warstw to inna sprawa i to jest pożądany efekt jak najbardziej.
@MQs:
Pisałem o tym właśnie i o to mi głównie chodzi, że większość projektów nie ma tak złożonej logiki, żeby ORM stanowił problem, a jak stanowi to pewnie warto przemyśleć jego użycie w kontekście całego projektu, albo pewnie lepiej w
Jeżeli nic to nie daje to faktycznie można olać temat, ale moim zdaniem równie poważnym problemem jest łapanie się na haczyk "instant gratification" narzędzi, bo trudno się z niego zerwać i potem widzi się jeszcze głupsze konstrukcje walczące z frameworkiem albo ignorowane/nadmiarowe testy.
Pisałem o tym właśnie i o to mi głównie chodzi, że większość projektów nie ma tak złożonej logiki, żeby ORM stanowił problem, a jak stanowi to pewnie warto przemyśleć jego użycie w kontekście całego projektu, albo pewnie lepiej w
@markaron:
Ten link zwraca 404. W sumie to zwykle podchodzę do tego bardzo podobnie, mam jedną metodę w klasie, ale nazywam to zwykle trochę inaczej niż CommandHandler, QueryHandler, a to dlatego, że nie dokładam jakiegoś busa do tego, bo wtedy znowu musiałbym być bardzo restrykcyjny co do zasad i pewnie nie zwracać danych z CommandHandlera. Chyba, że nie masz czegoś takiego na myśli i te handlery normalnie zwracają dane, wtedy
Ten link zwraca 404. W sumie to zwykle podchodzę do tego bardzo podobnie, mam jedną metodę w klasie, ale nazywam to zwykle trochę inaczej niż CommandHandler, QueryHandler, a to dlatego, że nie dokładam jakiegoś busa do tego, bo wtedy znowu musiałbym być bardzo restrykcyjny co do zasad i pewnie nie zwracać danych z CommandHandlera. Chyba, że nie masz czegoś takiego na myśli i te handlery normalnie zwracają dane, wtedy
@markaron: Poprawny link: https://cezarywalenciuk.pl/blog/programing/mediatr-cqrs-i-wzorzec-projektowy-mediator-w-aspnet-core bez tego nawiasu na końcu, z tego co widzę to tam CommandHandler faktycznie ma nic nie zwracać. Jak dla mnie to jednak brnięcie dla większości projektów zbyt daleko, ale to oczywiście zależy od projektu.
@markaron: jasne, też nie lubię takich przerośniętych serwisów, dlatego zwykle to separuję, ale bez busa i zwracam dane z command handlerów, chyba, że są jakieś drivery świadczące o tym, żeby zrobić inaczej.
@ajgoron: jest to opisane w podlinkowanym artykule, chodzi głównie o narzut ORMa (np. Doctrine), że w obiekcie musisz korzystać z kolekcji doctrinowych co powoduje, że domena nie jest czysta w 100%
Niech to będzie przestroga dla szefów, zarządów, rad nadzorczych. Na IT się nie oszczędza XD
#tvp #media #tvpis #sejm #programista15k