Finora ho messo le funzioni in oggetti, se quelle funzioni funzionano esclusivamente sulle variabili / stati dell'oggetto. Fondamentalmente sto seguendo un approccio al modello di dominio non anemico / ricco.
Tuttavia, diventa più difficile, se il comportamento è solo parzialmente basato sullo stato dell'oggetto. In questi casi vedo due opzioni:
- Approccio non anemico: passa le informazioni aggiuntive come argomento all'oggetto
obj.doSomeCalculationsAndSetAValue(someAdditionalInformation)
- Approccio anemico: crea un "oggetto servizio" che vive sopra l'oggetto dominio. L'oggetto servizio ha tutte le informazioni di cui ha bisogno, vale a dire l'oggetto dominio stesso e le "informazioni aggiuntive".
class ServiceObject{
AdditionalInformationWrapper additionalInfos;
//uses additionalInfos and gets information from domain object to do calculations;
//use obj-setter to set the calculated value
public void doSomeCalculationsAndSetAValue(DomainObject obj);
}
Quando dovrei mantenere la logica all'interno dell'oggetto dominio e quando all'interno dell'oggetto servizio?
C'è un'altra alternativa?