Ich habe ein Business-Layer-Objekt, das über Ebenen, Widget reist. Ich möchte, dass ein anderer Satz von Eigenschaften in verschiedenen Layern verfügbar gemacht wird. Hier ist, wie es aussehen würde, wenn Compiler Kommentare lesen:Zugänglichkeit nach Layer nicht nach Assembly
//bl.dll
public abstract class Widget
{
//repo only
internal virtual Ppty_A {get;set;} //internal to implementation assembly of repo
//repo and service only
internal virtual Ppty_B {get;set;} //internal to implementation assemblies of repo/svc
//everyone inlcuding presentation
public virtual Ppty_C {get;set;}
}
public interface IWidgetService
{ ... } }
public interface IWidgetRepo
{ ... }
public class SimpleWidgetService : IWidgetService
{ ... }
//dal.dll
using bl;
public WidgetRepo
{ ... }
//presentation.dll
using bl;
public WidgetController
{
public WidgetController(IWidgetService ...)
...
}
Meine Idee ist es, dies zu tun (ich habe das noch nicht getestet und es löst nur die Hälfte des Problems):
//bl.dll
public abstract class Widget
{
//repo only simply can't be defined in the abstraction -- can't see you => no contract
//repo and service only has to be public?
public virtual Ppty_B {get;set;}
//at least public is public...
public virtual Ppty_C {get;set;}
}
//dal.dll
using bl;
public SQLWidget : Widget //Or actually DALBLWidget -- see below?
{
//repo only
internal ...
internal ...
//the rest
...
}
Soll ich nur ein anderes abstraktes Widget erstellen (ein DAL-BL Widget und ein BL-UI Widget haben)?
Warum möchten Sie dieses Design? Wäre es nicht eine bessere Idee, benutzerdefinierte DTOs für jede Schicht zu haben und nur die Daten zu übergeben, die benötigt werden? –
Mir ist keine gute Option bekannt, die ganze "Spalte" schmerzlos zu aktualisieren, wenn ich Änderungen vornehmen muss; meine Intuition ist es, die Anzahl der Typen zu minimieren, die die gleiche Entität repräsentieren (ich hatte gehofft, nur eine mehr für das ORM zu benötigen) –
Was meinst du damit, die ganze Spalte zu aktualisieren? –