Separation of concerns - DAO, DTO, und BO
Also ich habe ein DAO, DTO, und BO. Der folgende code ist das Ergebnis:
//Instantiate a new user repository.
UserRepository rep = new UserRepository();
//Retrieve user by ID (returns DTO) and convert to business object.
User user = rep.GetById(32).ToBusiness<User>();
//Perform business logic.
user.ResetPassword();
user.OtherBusinessLogic("test");
user.FirstName = "Bob";
//Convert business object back to a DTO to save to the database.
rep.Save(user.ToDataTransfer<Data.DTO.User>());
So, ich bin versucht, voneinander zu trennen, aber ich möchte, um loszuwerden, der "wandelt" in diesem code. Die "konvertiert" sind tatsächlich in der business-Logik-Schicht (DTO-Schicht weiß nichts von der business-Logik-Schicht) als eine Erweiterung von object. Die DTO sich offensichtlich speichert nur Daten-und keine business-Logik, was-so-ever. Das UserRepository fordert, das DAO und am Ende GetById verwendet AutoMapper, aus der die Zuordnung der DAO-DTO. Die "konvertiert" (Geschäft und ToDataTransfer) genau das tun, was Sie sagen.
Ein Kollege von mir dachte, ich kann eine Business-Repository, aber dachte, es wäre ein bisschen umständlich. Irgendwelche Gedanken?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Meine einzige Quelle der Verwirrung hier ist der Grund, warum die Aufrufe
ToBusiness<User>()
undToDataTransfer<Data.DTO.User>()
notwendig sind.In der Verantwortung des Repository ist, Daten zu handhaben management. Es sollte verstecken die details der Implementierung (sowie die Konvertierungen zwischen Business-Objekten und-Daten-Objekte).
Einen
UserRepository
zurückgeben sollte eineUser
ohne casting benötigt.Den
UserRepository
sollte auch in der Lage sein zu bestehenUser
ohne casting.Würde der code viel übersichtlicher, wenn alle casting gehandhabt wurde, in das Repository und der code wird gelesen als:
Ich dieses Problem gelöst durch die Schaffung einer Business-Service-Schicht. Auf diese Weise kann ich auf alle Funktionen zugreifen, die durch die Business Service-Schicht, die wiederum nutzt die Repositories, die Abfrage der DAL und zurück DTOs. Die DTOs dienen Ihren Zweck, indem Sie bevölkert von DAL und transfer der Daten in den business layer (Umgerechnet auf business-Objekte).
Also das Diagramm ist wie folgt:
DAL -> Repository (gibt DTO) -> Service (Retouren BO)
Funktioniert es sehr gut und ich bin in der Lage, um business-Logik in die Service-Ebene abstrahiert es aus der Repository selbst. Beispiel-code:
Dies ist das erste mal, dass ich ein DTO, wandelt sich in eine BO, die ich normalerweise senden ein DTO zu werden verbraucht durch eine BO-Klasse oder Methode. Wenn die BO ist fertig und will speichern änderungen an der DTO schickt er es an die DAL und haben es beibehalten.