2010-11-19 9 views
1

HI,C# DAL Klasse und Business Schicht Klasse

können Sie mir sagen, ob dies möglich ist.

public class Person 
{ 
    public string Name { get; set; } 
    public int ID { get; set; } 
} 

Bestücken eine Klasse Anruf sagen Person, die in einer Baugruppe ist Entities wie dies mit der Bevölkerung des Codes genannt in einer anderen Baugruppe getan DataAccessLayer genannt (so Person und der Ort, wo es besiedelt ist nicht in der selbe Baugruppe)

// der untenstehende Code würde von einem Datenleser usw. lesen, aber ich habe es gerade gemacht, um es // leicht zu erklären.

Person p=new Person(); 
p.Name="tom"; 
p.id = 10; 

Die Personenklasse soll nun einem anderen System zugänglich gemacht werden, damit sie auf Personen zugreifen können. Ich möchte verhindern, dass das andere System die ID ändern kann. in der Lage sein, es zu lesen, aber nicht zu schreiben. Muss ich eine andere Klasse usw. erstellen, um dies zu ermöglichen, und diese Klasse nur dem anderen System (d. H. Einem Geschäftsobjekt) (d. H. ORM) offen legen?

Ich weiß, viele Leute werden sagen, nur die ID Readonly machen. das heißt

public int ID { get; } 

aber wenn ich dies tun, dann kann ich aus dem Code die ID nicht füllen ähnlich wie oben, weil in meinem DataAccessLayer werde ich nicht in der Lage sein, die ID zu setzen, wie es nur lesbar ist.

dank Niall

+0

Warum nicht die schreibgeschützten Eigenschaften beibehalten und einfach den Wert der Hintergrundvariable über den Konstruktor setzen? – Pierreten

Antwort

4

Sie können einen internal Konstruktor für das Objekt erstellen, die Sie ID in, dann setzen Sie die Kennzeichen für die Entitäten-DLL, die ermöglicht eine weitere DLL (DataAccessLayer) in der Lage sein zu sehen und nutzen passieren kann die interne Aufrufe innerhalb dieser DLL. (InternalsVisibleTo Attribut)

+0

Ja, das hat sogar eine bessere Verkapselung als meine Lösung (keine Sichtbarkeit des Konstruktors außerhalb der enthaltenden Baugruppe) – Pierreten

+0

Ausgezeichnetes Dankeschön dafür. nette Lösung – Somedeveloper

0

Blick in Richtung ORM-Tools, die für Sie ID der Entität zuweisen und Ihre ID-Eigenschaft aussehen wird:

public class MyEntity 
{ 
    public virtual int ID { get; protected set; } 

    // other properties 
} 

wenn Sie auf diese Weise zu wählen, Sie brauchen sich nicht um die Zuweisung Eigenschaften kümmern und Gießen von Typen.

Verwandte Themen