So cos'è l'SRP, ma sto mettendo in discussione il mio attuale design di un oggetto che io chiamo un'entità. Di seguito è riportata una foto del design a cui mi riferisco. Se spostassi il codice dagli oggetti GeometricInformation e TransactionInformation rispettivamente agli abstract GeometricEntityBase e TranslactionalEntityBase, questo sarebbe considerato un grave attacco di SRP? Spero che gli esperti qui possano aiutare a creare buchi in questo progetto o affermarlo se opportuno.
Per riassumere l'intento, ho una API CAD su cui sto lavorando. Ogni entità nel dominio CAD è rappresentata da un'entità nel codice. Per consentire alle Entità di portare solo quegli attributi appropriati al suo scopo, ci sono tre livelli di ereditarietà che l'Entità può usare. Ad esempio, se solo le funzioni Entity di base (come avere un ID, ecc.) Possono ereditare da EntityBase. Se richiede ulteriori proprietà geometriche per identificare i confini, il punto di inserimento, la matrice di trasformazione, ecc., Quindi erediterà da GeometricEntityBase. Se deve essere un'entità pienamente transazionale (tramite un framework transazionale personalizzato), allora è necessario che trasponga gli attributi di entrambi i plus transazionali (come lo stato dell'entità (nuovo, pulito, sporco), documento, ecc.).
Per garantire SRP, ho utilizzato il modello dell'adattatore e impostato gli attributi e le operazioni geometriche su un oggetto chiamato GeometricInformation e allo stesso modo le transazioni su TransactionInformation. Funziona alla grande, ma ora sto iniziando a rendermi conto che per consentire modifiche alle proprietà geometriche, ho bisogno di convalidare lo stato dell'entità. In altre parole, l'oggetto GeometricInformation deve conoscere gli attributi dell'oggetto TransactionInformation. Le soluzioni sembrano coinvolgere un modello di osservatore tale che il GeomtetricInformation possa osservare TransactionInformation (che sembra forzato) o asserire una proprietà XXXEntityBase "CanModify" che può essere modificata e osservata da un oggetto XXXInformation. Sfortunatamente ciò creerebbe una dipendenza bidirezionale dal momento che ogni oggetto XXXInformation avrebbe dovuto sapere che era padre.
A causa del fatto aggiuntivo che WCF viene utilizzato per comunicare le entità a un livello dati di livello inferiore, esiste anche un processo di traduzione per convertirli in equivalenti DTO. Alla fine, sto pensando di spostare il codice dagli oggetti XXXInformation ai loro equivalenti astratti che hanno comunque ben poco in essi, ma sono preoccupato che spezzare SRP possa potenzialmente causare problemi a valle. D'altro canto, ciò semplificherebbe di più le entità e consentirà al processo di traduzione di migliorare in termini di prestazioni, quindi sicuramente un po 'di dare e avere.