سؤال

لنفترض أنا النامية طلب للحصول على منتج أو موزع في C#.

الموزع يفعل ما يلي 3 أنواع من المعاملات:

(1) Indent

(2) بيع

(3) الأوراق المالية

أنا تصميم الفصول على النحو التالي:

public abstract class Transaction
{
}

public class Indent : Transaction
{
}

public class Sell : Transaction
{
}    

public class Stock : Transaction
{
}

الآن إذا كنت تريد حفظ هذه الأنواع الثلاثة من المعلومات في ثلاثة جداول منفصلة ثم كيف ينبغي تصميم لي دا طبقة?

يجب بناء منفصلة دا الطبقات مثل

(1) IndentDA
(2) SellDA
(3) StockDA

أو فئة واحدة TransactionDA وإجراء عمليات الخام عن طريق التحقق من أنواعها باستخدام as/is المشغلين ؟

أو ماذا يمكن أن أفعل ؟ أي اقتراحات ؟

هل كانت مفيدة؟

المحلول

أولا، إذا قمت بإنشاء فئة واحدة TransactionDA وفحص أنواع داخل الطبقة لإجراء عمليات الخام، التي ستكون منتهكة في فتح / مغلقة مبدأ ، ولذا فإنني بالتأكيد لن يذهب في هذا الطريق.

وأما بالنسبة للاقتراحات حول كيفية إنجاز بناء من DAL الخاص بك، أود أن أقترح التالي بعض بلوق وظائف على الناس أذكى بكثير مما كنت على ما اعتقد حول هذا الموضوع.

مستودع هو سينغلتون جديد

مستودع هو الميت: تحيا مستودع

ليلة من مستودعات المعيشة

والمحادثة لا تزال، على ما أعتقد، ولكن هذا يجب ان تحصل على انك بدأته.

نصائح أخرى

وأود أن استخدام ORM مثل NHibernate واستخدامه من قدرات الميراث متعددة الجدول ومن ثم لا داعي للقلق حول ذلك بنفسي.

وأود أن استخدام أنواع فرعية كيان هنا. إنشاء طاولة واحدة للمعاملات (وكما قال ملصق في وقت سابق، وربما على المدى مختلفة سيكون أفضل) وتخزين كل ما هو شائع في هناك. ثم إنشاء واحد "النوع الفرعي" جدول لكل تخصص. يجب أن يكون هذه الجداول النوع الفرعي نفس المفتاح الأساسي كما في الجدول الرئيسي ( "قوية" كيان) والحقول التي هي فريدة من نوعها لهذا التخصص بالذات. يرتبط كل نوع فرعي للكيان قوي بطريقة واحد الى واحد، بمشاركة اختياري على نهاية سلالة والمشاركة المطلوبة على نهاية كيان قوية.

وبعد ذلك، لجعل الاستعلام أسهل، وتعريف الرأي القائل بأن (الخارجي) تنضم إلى كيان قوي مع كل من الأنواع الفرعية كيان بحيث يمكنك بسهولة "رؤية" كل شيء.

وهنا مثال بسيط (وشائع) كيفية إعداد هذا:

create table Employee (
  eid        int primary key,
  first_name text,
  last_name  text not null
)

create table Salaried (
  eid             int primary key,
  annualSalaryUSD money not null
)

create table Hourly (
  eid             int primary key,
  hourlyRateUSD   money not null
)  

إذا كنت تعرف أن البيانات الخاصة بك هو الذهاب إلى ثلاثة جداول منفصلة ، ثم أود أن عادة ثلاثة منفصلة دا الطبقات.

ومع ذلك ، إذا كانت الجداول هي الى حد كبير نفس ، ثم يمكن أن genericize على TransactionDA و تبسيط طبقة البيانات.وأود أن تفعل هذا إلا إذا كنت تعرف أن كنت سوف يكون ارتفاع حجم المعاملات و ستكون فصل الجداول الخاصة بك في ملفات مختلفة أو شيء من هذا ، وإلا أنا ربما مجرد تبسيط الأمور و الجمع بين كل ذلك.

لا تحاول أن تخلق TransactionDA إلا كل فصل المعاملات للغاية مماثلة.

ويمكنك استخدام حقن التبعية، إنشاء فئة DA لكل ويكون كل منهم تنفيذ نفس واجهة ITransactionDA مع عمليات الخام الخاصة بك.

public interface ITransactionDA
{
  void Read();
  void Update();
...
}

public class StockDA : ITransactionDA
{
  //implement interface methods
}

Stock stock = new Stock(new StockDA());

وسأفعل شيء من هذا القبيل

public abstract class DistributerTransaction
{
    DistributerDA dataaccess;
}
public class Indent : DistributerTransaction
{
}
public class Sell : DistributerTransaction
{
}
public class Stock : DistributerTransaction
{
}

public abstract class DistributerDA
{
   /*Read();
     Update();*/
}
public class IndentDA : DistributerDA
{
}
public class SellDA : DistributerDA
{
}
public class StockDA : DistributerDA
{
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top