Datenzugriffsschicht - Entwurfsklasse, in der die Verantwortung für das Erstellen von Speichern liegen sollte

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

Frage

Ich entwerfe Data Access Layer mit ADO.NET 2.0 und C #, SQL Server 2005. Ich kämpfe oft mit meinem Gehirn darüber, wo diese Anrufe getätigt werden sollen. Welche der folgenden Methoden sollte ich für wartbaren robusten Code befolgen?

Methode 1
Public Class Company
{

public string CompanyId
{get;set;}

public string CompanyAddress
{get;set;}

public bool Create()
{
}

public bool Update()
{
}

public bool Delete()
{
}

}

Methode 2
Public Class Company
{

public string CompanyId
{get;set;}

public string CompanyAddress
{get;set;}
}

und ich würde eine andere Klasse wie unten verwenden, um den Kerndatenzugriff durchzuführen.Wie unten

Public Class CompanyRepository
{

public Company CreateCompany(string companyId,string companyDescription)
{
}

public bool UpdateCompany(Company updateCompany)
{
}

public bool DeleteCompany(string companyId)
{
}

public List<Company> FindById(string id)
{
}


}

War es hilfreich?

Lösung

Fahren Sie mit Methode 2 fort. Es liegt nicht in der Verantwortung der Unternehmensklasse, aus einer Datenquelle zu lesen / schreiben ( Prinzip der Einzelverantwortung ).Ich würde jedoch sogar so weit gehen, eine ICompanyRepository-Schnittstelle zu erstellen und dann eine CompanyRepository-Implementierung für die Schnittstelle zu erstellen.Auf diese Weise können Sie das ICompanyRepository in die Klasse einfügen, die Unternehmensinformationen speichern / abrufen muss.Es ermöglicht auch einfachere Unit-Tests und die Möglichkeit, in Zukunft eine andere Implementierung zu erstellen (Wechsel von einer Datenbank zu XML-Dateien oder was auch immer).

Andere Tipps

Wenn Sie dem Prinzip der Trennung von Bedenken folgen, werden Sie mit Methode 2 fortfahren.

Unterschiedliche Verantwortlichkeiten in verschiedenen Klassen helfen beim Erstellen von testbarem, wartbarem Code.

Dies führt auch zu kleineren, zusammenhängenderen Klassen, die einfacher zu schreiben, zu begründen und auf Richtigkeit zu überprüfen sind.

Als Hinweis können Sie ein ORM verwenden, anstatt Ihren Datenzugriff von Hand zu erstellenSchicht.

Ich würde für die zweite Wahl stehen, weil

  • Zuerst erstellen Sie Ihren data holder
  • nach der Kiste Ihren operational unit

    In diesem Fall trennen Sie die Daten von den Funktionen, die sie ausführen, wodurch der UnitTesting erheblich vereinfacht wird und die Verantwortlichkeiten zwischen verschiedenen Domänen Ihres Codes verteilt werden, möglicherweise mit einfachen Fehlerlokalisierungen.

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