««« | »»»
OR Mappers: business logic e operazioni sul db
Questa serie di post sta diventando una saga… Come spesso capita, una volta che si inizia a dubitare, le domande fioccano.
Di solito, una volta mappata la tabella sulla classe poi possiamo implementare la cosiddetta business logic in quella classe. Spesso, però, succede che questa business logic tocchi più classi contemporaneamente; quindi mi sono chiesto: non sarebbe più semplice considerare quelle classi come “passive” — per così dire — e implementarla completamente al di fuori di esse? Nell’EOF, questo equivale a mappare tutte le tabelle con l’EOGenericRecord o una sua sottoclasse.
Inciso: questo è un difetto più generale dei linguaggi OO: devi sempre avere una classe o un istanza di quella classe a cui “attaccare” un metodo. So benissimo che solitamente questa caratteristica non è vista in modo negativo ma sono arrivato a un’altra conclusione; ne parleremo un’altra volta.
Sull’altro versante, quello del database, abbiamo tutte quelle operazioni come le join e gli aggregati (SUM, AVG e così via) che sono molto più facilmente utilizzabili direttamente a quel livello. In questi casi le uniche possibilità sono: aggirare la mappatura e manipolare i risultati grezzi o definire delle ulteriori mappature.
Di solito preferisco usare la prima soluzione: la mappatura non sarà completa ma copre almeno i casi principali. La seconda appesantisce il domain model di entità/classi con uno scopo limitato a casi speciali.
Per proseguire
Commenti e trackback sono disabilitati.
Commenti su OR Mappers: business logic e operazioni sul db
Una risposta
OR Mappers: pro e contro i domain models - ReFactor.it (10/04/09)
[…] obiezione che viene subito in mente contro l’idea di ridurre i domain objects a semplici EOGenericRecord è quello dell’antipattern (o code smell, […]