كائن الأعمال، على كائن السلك والآلة الحاسبة - أيهما أفضل

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

سؤال

أرى هذا النمط مرارًا وتكرارًا وأردت الحصول على آراء:


الخيار 1:فيما يتعلق بكائن السلك وتكوين كائن الأعمال:

على كائن السلكt - البيانات التي يتم تسلسلها وإرسالها ذهابًا وإيابًا عبر الأجهزة (العميل / الخادم، وما إلى ذلك).هذا كائن POCO.

على سبيل المثال:

public class Order
{
    public int Price;
    public int Amount;
}

الكائنات الأعمال - فئة أخرى تحتوي عادةً على بعض أو كل الخصائص مثل كائن السلك ولكن أيضًا بعض الحقول المحسوبة.يستخدم هذا عادةً التركيب الموجود أعلى الكائن "الموجود على السلك".

public class OrderBusinessObject  
{  
     private Order _order;

     public OrderBusinessObject(Order o)
     {
          _order = o;
     }

     public int Price {return _order.Price;}  
     public int Amount{return _order.Amount;}  
     public int Total{return _order.Price * _order.Amount;}            
}  

الخيار 2:في كائن السلك وكائن الأعمال عن طريق التحويل:

سيكون هذا هو نفسه بالنسبة لكائن السلك كما في المثال 1 ولكن كائن الأعمال، بدلاً من استخدام التركيب، سيستخدم الترجمات:

public class OrderTranslator
{
    public OrderBusinessObject Translate(Order o)
    {
         OrderBusinessObject bo = new OrderBusinessObject();
         bo.Amount = o.Amount;
         bo.Price = o.Price;
         return bo;
    }
}

public class OrderBusinessObject  
{    
     private int _price;
     private int _amount;

     public int Price {return _price;}  
     public int Amount{return _amount;}  
     public int Total{return _price * _amount;}            
}  

الخيار 3:لا تمتلك كائن الأعمال على الإطلاق وقم بإجراء جميع حساباتك في فصل دراسي منفصل للآلة الحاسبة. ملحوظة:يحصل المستهلكون على جسم سلكي وآلة حاسبة

public class Consumer
{
     public void ShowTotal(Order o)
     {
         Calculator calc = new Calculator();
         double total = calc.ShowTotal(o);
      }
}

كنت أرغب في الحصول على آراء الناس حول ما إذا كان هناك أفضل ممارسة أو نمط هنا أم أن هذه مجرد مسألة تفضيل المستخدم

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

المحلول

في الأنظمة على مستوى المؤسسة، أفضل أن أختار الخيار 2.تساعد هذه الطريقة على تطوير العقد أولاً في بيئة SOA وتسمح لكائنات المجال الخاص بك بالبقاء مستقلة عن التمثيلات السلكية.إنه يسهل تغييرات العقد بمرور الوقت ويسمح للمجال وجهات اتصال البيانات بالتغيير بشكل مستقل عن بعضها البعض.يمكن أن يكون رمز الترجمة مؤلمًا بعض الشيء، ولكن يمكنك استخدام أداة مثل Automapper لتسريع ذلك.

ومع ذلك، قد لا تحتاج إلى هذا المستوى من المرونة في كل تطبيق.

بالنسبة لي، يميل الخيار 3 إلى التعارض مع المبادئ الموجهة نحو الكائنات والموجهة بالمجال لأنه يُظهر السلوك خارجيًا، مما يؤدي إلى نموذج مجال ضعيف.يتعارض الخيار 1 أيضًا بعض الشيء مع التصميم المعتمد على المجال لأن نماذج النطاق الخاصة بك ستعتمد على عقود البيانات، في حين أن الأمر يجب أن يكون على العكس من ذلك.في نموذج يتمحور حول المجال، يجب أن تكون كائنات المجال هذه مستقلة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top