2016-05-27 3 views
1

Ich kann nicht entscheiden, was das ist Infrastruktur oder Domänenverantwortung:Domain Driven Design: Infrastruktur betrifft oder Domäne Sorge?

Benutzer kann Datumsbereich in URL-Abfrage übergeben, zB dateStart = 2016-04-12, dateEnd = 2016-04-15. Basierend auf diesem Datumsbereich geben wir eine Liste von Entitäten zurück, die zwischen diesen beiden Daten ein field createdOn haben. Damit dies richtig funktioniert, muss ich 2016-04-12 zu 2016-04-12 00:00:00 und 2016-04-15 zu 2016-04-15 23:59:59 konvertieren, sollte diese Umwandlung als Infrastrukturbetrachtung betrachtet werden (und sollte in Repository, oder vielleicht Anwendungsebene) oder Geschäftsregel (und sollte in Dienst oder Entität gebracht werden)?

+0

Idealerweise sollten Sie eine Serviceklasse oder eine Bibliotheksklasse mit allen gängigen Funktionen haben. Denn in diesem Fall könnte eine Funktion namens formatInputDate eine Funktion sein, mit der Sie Ihr Datum formatieren können. –

+1

Dies scheint eine Dateneinschränkung zu sein, da Ihre Anwendungsregeln das kurze ISO-Datumsformat zulassen, während Ihre Datenbank nur ein langes ISO-Datumsformat unterstützt. Es handelt sich also um eine Datenbankfunktion, die in die Datenzugriffsebene (oder in gespeicherte Prozeduren/Ansichten, wenn Sie diese verwenden) eingefügt werden soll. –

+1

'DateRange' scheint ein ziemlich wichtiges Konzept zu sein. Ich würde es als Wertobjekt modellieren, das Datumsbereichsregeln erzwingt. Die Grenzen eines Datumsbereichs werden durch Datumswerte definiert. Der Anwendungsdienst würde die Zeichenfolgen empfangen und einen "DateRange" erstellen. Der 'DateRange' würde dann an das Repository übergeben. Die Datumsformatierung würde dann innerhalb des Repositorys stattfinden (Delegieren von Datum-Dienstprogramm-Methoden). – plalx

Antwort

3

sollte diese Umwandlung als Infrastrukturbetrachtung betrachtet werden (und sollte im Repository, oder vielleicht Anwendungsschicht) oder Geschäftsregel (und sollte in Dienst oder Entität gebracht werden)?

Wie plalx erwähnt, ist DateRange/TimeInterval wahrscheinlich ein wichtiges Konzept auf seinem eigenen, und soll als Werttyp in Ihrem Modell dargestellt werden.

Nehmen Sie die Benutzereingaben, die Sie erhalten, und drücken Sie sie in den Typen aus, die von Ihrem Modell dargestellt werden.

Das Auffinden einer Liste von Entitäten, die diese Einschränkung erfüllen, sollte ein Problem mit dem Repository sein. Es kann nützlich sein, diese Einschränkung in Ihrem Repository-Vertrag explizit zu machen - sie dient dazu, zu dokumentieren, welche Funktionen Sie in den zugrunde liegenden Speichern benötigen.

0

Ich würde ein Util Objekt (Klasse) erstellen, die die Konvertermethode für Sie bereitstellen würde.
Sie müssen entscheiden, wie Sie das Format in Ihren tiefsten Schichten (eine Art Repository?) Verwenden würden. Wenn dieses Format nicht mit dem Format übereinstimmt, das auf der Anwendungsebene angezeigt wird, müssen Sie die Konversation irgendwo verwenden (ich schlage den oberen Teil Ihrer Backend-API vor), bin aber bereit, die Validierung innerhalb der Repository-Ebene usw. zu verwenden. auch.

Verwandte Themen