Hat jemand einen guten Artikel oder gute Ratschläge für Klassennamen für n-tier Web-Anwendungen?

StackOverflow https://stackoverflow.com/questions/117492

  •  02-07-2019
  •  | 
  •  

Frage

Ich bin auf das Layout verwendet, die LLBLGen geben, wenn es Objekte basierend auf einer Datenbank-Struktur erzeugt, die die folgenden Klassendateien für eine bestimmte „User“ Tabelle in der Datenbank könnten generieren:

/EntityClasses/UserEntity.vb
/CollectionClasses/UserCollection.vb

Dies bietet einige Basisfunktionen für den Datenzugriff. Wenn Sie jedoch die Geschäftslogik auf der Oberseite, dass implementieren möchten, wie legen Sie die Dinge aus? Zum Beispiel eine Tabellenstruktur gegeben, die wie folgt aussehen:

 USER
 userId
 firstName
 lastName
 username
 password
 lockedOut

Was ist, wenn Sie einen Benutzer sperren wollte? Welcher Code würden Sie aus der Präsentationsschicht nennen? Würden Sie das UserEntity Klasse instanziiert, und zu tun:

 User = new UserEntity(userId)
 User.lockedOut = true
 User.Save()

Oder möchten Sie eine neue Klasse, wie userhelper (/BusinessLogic/UserHelper.cs) erstellen, die eine LockOutUser Funktion haben könnte. Das würde den Code ändern zu sein:

 UH = new UserHelper()
 UH.LockOutUser(userId)

Oder würden Sie die Basis UserEntity Klasse erweitern und erstellen UserEntityExt, die die neue Funktionalität hinzufügt? Daher könnte der Code aus der Präsentationsschicht wie folgt aussehen:

 User = new UserEntityExt(userId)
 User.LockOutUser()

oder ... würden Sie tun etwas ganz anderes?

Und was würden Ihre Verzeichnis / Namespace-Struktur und Datei / Klasse Namenskonventionen sein?

War es hilfreich?

Lösung

Ich denke, was Sie suchen ist eine Service-Schicht, die auf der Oberseite der Domain-Objekte sitzen würde. Sie haben im Wesentlichen diese mit Ihrer zweiten Option, obwohl ich nennen könnte es Userservice oder benutzerdefinierte Aufgabe. Durch Einkapseln dieses LockUser Prozess in einem einzigen Ort wird es einfach sein, später zu ändern, wenn es möglicherweise beteiligt mehrere Schritte oder andere Domain-Objekte sein. Auch dies wäre der richtige Ort, um Transaktionen zu implementieren, wenn sie mit mehreren Datenbank Anrufe.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top