سؤال

يتطلب تطبيق الويب الرئيسي لشركتي مجموعة رائعة من المكتبات لجعله قابلاً للصيانة والتوسع بطريقة ما، وقد اقترح أحد زملائي CSLA.لقد اشتريت الكتاب ولكن كـ:

المبرمجون لم يعودوا يقرؤون الكتب بعد الآن

أردت قياس رأي مجتمع SOFlow به.

إذا هذه هي اسئلتي:

  1. كيف يمكن للناس استخدام CSLA؟
  2. ما هي إيجابيات وسلبيات؟
  3. هل CSLA حقًا لا يتناسب مع TDD؟
  4. ما هي البدائل المتاحة لي؟
  5. إذا توقفت عن استخدامه أو قررت عدم استخدامه، لماذا؟
هل كانت مفيدة؟

المحلول

قبل أن أجيب على سؤالك على وجه التحديد، أود أن أضع بعض الأفكار.هل CSLA مناسب لمشروعك؟هذا يعتمد.أنا شخصياً سأفكر في CSLA للتطبيقات المستندة إلى سطح المكتب والتي لا تقدر اختبار الوحدة كأولوية عالية.يعد CSLA أمرًا رائعًا إذا كنت تريد التوسع بسهولة إلى تطبيق من المستوى n.يميل CSLA إلى الحصول على بعض الأخطاء لأنه لا يسمح باختبار الوحدة النقي.هذا صحيح، ولكن مثل أي شيء في مجال التكنولوجيا، أعتقد أن هناك لا توجد طريقة واحدة صحيحة.قد لا يكون اختبار الوحدة شيئًا تقوم به لمشروع معين.ما يصلح لفريق واحد ومشروع واحد قد لا يصلح لفريق آخر أو لمشروع آخر.

هناك أيضًا العديد من المفاهيم الخاطئة فيما يتعلق بـ CSLA.إنها ليست ORM.إنه ليس منافسًا لـ NHibernate (في الواقع استخدام CLSA Business Objects & NHibernate حيث يتناسب الوصول إلى البيانات معًا بشكل جيد).إنه يضفي الطابع الرسمي على مفهوم أ كائن المحمول.

1.كم عدد الأشخاص الذين يستخدمون CSLA؟
على أساس منتديات CSLA, أود أن أقول إن هناك عددًا لا بأس به من المشاريع القائمة على CSLA.بصراحة، ليس لدي أي فكرة عن عدد الأشخاص الذين يستخدمونه بالفعل.لقد استخدمته في الماضي في مشروعين.

2.ما هي إيجابيات وسلبيات؟
في حين أنه من الصعب تلخيصها في قائمة قصيرة، إليك بعض الإيجابيات/السلبيات التي تتبادر إلى ذهنك.
الايجابيات:

  • من السهل الحصول على مطورين جدد إلى السرعة.يعد كتاب CSLA و Sample App موارد رائعة للوصول إلى السرعة.
  • يعد إطار التحقق من الصحة من الطراز العالمي حقًا - وقد تم "استعارته" للعديد من المشاريع والتقنيات الأخرى غير التابعة لـ CSLA.
  • التراجع عن المستوى n داخل كائنات عملك
  • تغيير سطر التكوين لقابلية التوسع n-Tier (ملاحظة:ولا حتى إعادة الترجمة ضرورية)
  • يتم استخلاص التقنيات الأساسية من الكود "الحقيقي".عندما تم تقديم WCF ، كان لها تأثير ضئيل على رمز CSLA.
  • من الممكن مشاركة كائنات عملك بين النوافذ ومشاريع الويب.
  • CSLA يعزز التطبيع سلوك بدلا من التطبيع بيانات (ترك قاعدة البيانات لتطبيع البيانات).

سلبيات:

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

3.بعد قراءة هذا، هل CSLA لا يتناسب حقًا مع TDD؟
لم أجد طريقة فعالة للقيام بـ TDD باستخدام CSLA.ومع ذلك، أنا متأكد من أن هناك العديد من الأشخاص الأكثر ذكاءً مني والذين ربما جربوا ذلك بنجاح أكبر.

4.ما هي البدائل المتاحة لي؟
يحظى التصميم المعتمد على المجال بدفعة كبيرة في الوقت الحالي (وهذا صحيح - إنه أمر رائع بالنسبة لبعض التطبيقات).هناك أيضًا عدد من الأنماط المثيرة للاهتمام التي تم تطويرها منذ تقديم LINQ (ومن LINQ إلى SQL وEntity Framework وما إلى ذلك).كتاب فاولر بو, ، تفاصيل العديد من الأنماط التي قد تكون مناسبة لتطبيقك.لاحظ أن بعض الأنماط تتنافس (أي.Active Record and Repository)، ومن ثم يُقصد استخدامها في سيناريوهات محددة.على الرغم من أن CSLA لا يتطابق تمامًا مع أي من الأنماط الموضحة في هذا الكتاب، إلا أنه يشبه إلى حد كبير Active Record (على الرغم من أنني أشعر أنه من قصر النظر المطالبة بمطابقة تامة لهذا النمط).

5.إذا توقفت عن استخدامه أو قررت عدم استخدامه، لماذا؟
لم أوصي بشكل كامل بـ CSLA لمشروعي الأخير، لأنني أعتقد أن نطاق التطبيق كبير جدًا بالنسبة للفوائد التي توفرها CSLA.
أود لا استخدم CSLA في مشروع ويب.أشعر أن هناك تقنيات أخرى أكثر ملاءمة لبناء التطبيقات في تلك البيئة.

باختصار، في حين أن CSLA ليست سوى رصاصة فضية, ، وهو مناسب لبعض السيناريوهات.

أتمنى أن يساعدك هذا!

نصائح أخرى

بعد قراءة جميع الإجابات، لاحظت أن عددًا لا بأس به من الأشخاص لديهم بعض المفاهيم الخاطئة حول CSLA.

أولاً، CSLA ليس ORM.كيف يمكنني أن أقول ذلك بكل تأكيد؟لأن روكفورد لوتكا صرح بذلك بنفسه عدة مرات في المقابلات التي أجراها على قناة صافي الصخور و هانسيلمينيتس المدونة الصوتية.بحث أي الحلقة التي تمت فيها مقابلة روكي وسيذكرها بعبارات لا لبس فيها.أعتقد أن هذه هي الحقيقة الأكثر أهمية التي يجب على الناس فهمها، لأن معظم المفاهيم الخاطئة حول CSLA تنبع من الاعتقاد بأنها ORM أو محاولة استخدامها كواحدة منها.

كما ألمح براد ليتش في إجابته، تعترض CSLA على نموذج السلوك، على الرغم من أنه قد يكون أكثر دقة أن نقول إنها نموذج لسلوك البيانات، نظرًا لأن البيانات جزء لا يتجزأ منها.CSLA ليست ORM لأنها لا تعرف تمامًا كيفية التحدث إلى مخزن البيانات الخاص بك.أنت يجب استخدم نوعًا ما من طبقة الوصول إلى البيانات مع CSLA، وربما حتى ORM.(أفعل.أستخدم الآن Entity Framework، الذي يعمل بشكل جميل.)

الآن، إلى اختبار الوحدة.لم أواجه مطلقًا أي صعوبة في اختبار كائنات CSLA الخاصة بي، لأنني لا أضع رمز الوصول إلى البيانات الخاص بي مباشرة في كائنات الأعمال الخاصة بي.بدلاً من ذلك، أستخدم بعض الاختلافات في نمط المستودع. يتم استهلاك المستودع بواسطة CSLA، وليس العكس. من خلال التبديل في مستودع مزيف لاختبارات وحدتي واستخدام بوابة البيانات المحلية، فقاعة! انه سهل.(بمجرد أن يسمح Entity Framework باستخدام POCO، سيكون هذا أكثر نظافة.)

كل هذا يأتي من إدراك أن CSLA ليس ORM.قد يستهلك ORM، لكنه في حد ذاته ليس واحدًا.

هتافات.

تحديث

اعتقدت أنني سأدلي ببعض التعليقات الإضافية.

قال بعض الأشخاص أن CSLA مطول مقارنة بأشياء مثل LINQ إلى SQL وما إلى ذلك.لكننا هنا نقارن التفاح بالبرتقال.LINQ إلى SQL هو ORM.إنه يقدم بعض الأشياء التي لا تقدمها CSLA، ويقدم CSLA بعض الأشياء التي لا تقدمها L2S، مثل التحقق المتكامل و ن-الثبات من خلال بوابات البيانات المختلفة عن بعد.في الواقع، أود أن أقول هذا الشيء الأخير، ن-المثابرة من الدرجة الأولى، تتفوق عليهم جميعًا بالنسبة لي.إذا كنت أرغب في استخدام Entity Framework أو LINQ إلى SQL عبر الشبكة، فيجب أن أضع شيئًا مثل WCF بينهما، وهذا يضاعف العمل والتعقيد بشكل كبير، إلى النقطة التي أعتقد أنها كذلك كثيراً أكثر تفصيلاً من CSLA.(الآن، أنا معجب بـ WCF وREST وSOA، ولكن استخدمها حيث تحتاج إليها حقًا، على سبيل المثال عندما تريد عرض خدمة لأطراف ثالثة.بالنسبة لمعظم تطبيقات الأعمال، ليست هناك حاجة إليها حقًا، ويعد CSLA خيارًا أفضل.) في الواقع، مع الإصدار الأحدث من CSLA، يوفر Rocky WCFDataPortal, ، الذي استخدمته.إنه يعمل بشكل رائع.

أنا من محبي صلب, وTDD وغيرها من مبادئ تطوير البرمجيات الحديثة، واستخدامها أينما كان ذلك عمليًا.لكنني أعتقد أن فوائد CSLA تفوق بعض الاعتراضات على تلك المعتقدات التقليدية، وعلى أي حال تمكنت من جعل CSLA تعمل بشكل جيد (وبسهولة) مع TDD، لذا فهذه ليست مشكلة.

نعم، لقد استخدمته (أم، نحن) على نطاق واسع لنمذجة منطق عمليات الأعمال لدينا والذي كان في المقام الأول عبارة عن نماذج مرتبطة بالبيانات في تطبيق نماذج Windows.وكان التطبيق نظام التداول.تم تصميم CSLA ليكون في تلك الطبقة الموجودة أسفل واجهة المستخدم مباشرةً.

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

سلبياتها هي أن لديها القليل من منحنى التعلم.

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

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

لقد قمنا أيضًا ببناء آليات لإجراء التحقق بشكل غير متزامن مقابل خدمة الويب (أي.التحقق من نطاق الحد الائتماني للطرف المقابل مقابل السيد).

يفرض CSLA فصلًا قويًا بين واجهة المستخدم الخاصة بك، وBusinessLogic، والمثابرة، وقد كتبنا عددًا كبيرًا من اختبارات الوحدات ضدهم.قد لا يكون TDD بشكل صارم لأنك تقوده من تصميم واجهة المستخدم، وهذا لا يعني أنه غير قابل للاختبار.

البديل الحقيقي الوحيد هو إنشاء نموذج \ كائنات الأعمال الخاصة بك، ولكن سرعان ما ينتهي بك الأمر إلى تنفيذ الميزات التي تقدمها CSLA خارج الصندوق (INotifyPropertyChanged، IDataErrorInfo، PushState، PopState وما إلى ذلك)

لقد استخدمت CSLA لمشروع واحد وقد نجح الأمر بشكل رائع وجعل الأمور أبسط وأكثر دقة.

بدلاً من جعل فريقك يكتب عناصر العمل بأسلوبهم الشخصي المختلف، نعلم أن لديهم معيارًا مشتركًا للعمل وفقًا له.

//اندي

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

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

بعد أخذ كل الأمور بعين الاعتبار، لن يكون خياري الأول للهندسة المعمارية.

دفاعًا عن CSLA، على الرغم من أنني أتفق مع العديد من التعليقات التي تم تقديمها وخاصةً الوحدة التي تختبر واحدة...

استخدمته شركتي على نطاق واسع لتطبيق إدخال بيانات Windows Forms، وحققت درجة عالية من النجاح.

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

على العموم أود أن أقول إن أي مشكلات ناجمة عن ذلك كانت أكثر من مجرد فوائد.

تحديث:علاوة على ذلك، ما زلنا نستخدمه لتطبيق نماذج Windows الخاص بنا ولكن التجارب على استخدامه لتطبيقات أخرى مثل مواقع الويب أظهرت أنه ربما يكون مرهقًا عندما لا تحتاج إلى الكثير من وظائفه ونحن الآن نحقق في الوزن الخفيف خيارات لهذه السيناريوهات.

لقد انضممت إلى فريق حيث CSLA إلزامي.نحن لا نستخدم بوابة البيانات عن بعد وهذا هو السبب الوحيد الذي يجعلني أوافق على استخدام هذا الإطار.لم أقتنع مطلقًا بفكرة CSLA، لذا ربما لهذا السبب ليس لدي سوى مشكلات معها، آسف.

زوجان من القضايا:

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

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

ثم يريد csla إدارة حالة الكائن الخاصة بي، وهو أمر جيد ولكن لم يتم الكشف عن أي شيء حقًا.أحيانًا أرغب في تغيير حالة الكائن يدويًا بدلاً من جلبها مرة أخرى، وهو ما يبدو أنه ما يريدني CSLA أن أفعله.انتهى بي الأمر بشكل أساسي إلى إنشاء العديد من الخصائص لكشف الخيارات التي لم يعتقد CSLA أنه يجب أن يكون لدي وصول مباشر إليها.

لماذا لا يمكنني إنشاء مثيل لكائن ما؟انتهى بنا الأمر إلى إنشاء أساليب ثابتة تعمل على إنشاء كائن وتمريره مرة أخرى... هل تمزح معي؟

تحقق من الكود المصدري لإطار العمل ويبدو أنه ثقيل على كود الانعكاس بالنسبة لي.

دواعي استخدام كسلا:

  • يعتبر إطار عمل .net المستقيم قويًا جدًا بالنسبة لك.
  • المطورون لديك ليسوا متمرسين ولا يمكنهم استيعاب مفهوم الأنماط، لذا فإن CSLA ستجعل الجميع في نفس الصفحة تقريبًا.

    1. لا أحتاج إلى حاجز بين الكود الخاص بي وإطار عمل .NET...أنا عالق مع كائنات القائمة هذه.

لقد بدأنا باستخدام CSLA لأننا اعتقدنا أنه سيساعد في طبقة النموذج الخاصة بنا.لقد كان الأمر مبالغًا فيه نوعًا ما، وفي الغالب كل ما نستخدمه الآن هو فئة SmartDate، فقط لأننا مرتبطون بالفعل بالمكتبة.

اعتقدنا أن واجهة التحقق من الصحة ستساعدنا حقًا في فرض قواعد العمل ولكنها لم تعمل بشكل جيد مع WCF والتسلسل (ما زلنا عالقين في الإصدار 2.0.3.0، لذا ربما تغيرت الأمور).

لا تأخذ CSLA من القائمة، ولكن قبل استخدامه، ابحث عن الفوائد وتأكد من أنها تنطبق بالفعل.هل سيكون فريقك قادرًا على تنفيذه بشكل صحيح/متسق؟هل هناك حاجة إلى التحكم عن بعد ورقص البوابة؟

أعتقد أنه بعيدًا عن كل التفكير النظري، فإن الأمر كله يتعلق بكود نظيف/قابل للصيانة/قابل للتمديد/قابل للاختبار باتباع الأنماط الأساسية المثبتة.

لقد قمت بإحصاء أسطر التعليمات البرمجية المطلوبة في مجال معين لمشروع تم تحويله من CSLA.بين جميع كائنات CSLA المختلفة (مجموعات القراءة فقط + القابلة للتحرير + الجذر + القائمة) وعملياتها المخزنة، استغرق الأمر حوالي 1700 سطرًا، مقابل تنفيذ Linq2SQL + Repository الذي استغرق 180 سطرًا.يتكون إصدار Linq2SQL في الغالب من فئات تم إنشاؤها ولا يحتاج فريقك إلى استهلاك الكتاب لفهمها.ونعم، لقد استخدمت CodeSmith لإنشاء أجزاء CSLA، لكنني أؤمن الآن بالكود الجاف مع بتات ذات مسؤولية واحدة، ويبدو لي الآن تنفيذ CSLA مثل بطل الأمس.

كبديل، أود أن أقترح النظر في Linq2Sql/Entity Framework/NHibernate مع أنماط المستودع وUnitOfWork.القي نظرة على http://www.codeplex.com/backgroundmotion

هتافات!

مارست شركتنا CSLA في بعض مشاريعها ولا تزال بعض المشاريع القديمة هي CSLA.ابتعدت المشاريع الأخرى عنه لأن CSLA انتهكت قاعدة OOP واضحة وبسيطة:مبدأ المسؤولية الفردية.

كائنات CSLA مكتفية ذاتيا، على سبيل المثال.فهم يستردون بياناتهم الخاصة، ويديرون سلوكهم، وينقذون أنفسهم.لسوء الحظ، هذا يعني أن كائن CSLA المتوسط ​​الخاص بك لديه ثلاث مسؤوليات على الأقل - تمثل نموذج المجال، وتحتوي على قواعد العمل، وتحتوي على تعريف الوصول إلى البيانات (وليس DAL، أو تنفيذ الوصول إلى البيانات، كما ذكرت/ألمحت سابقًا) جميعها في نفس الوقت وقت.

نحن نستخدم CSLA على نطاق واسع.هناك عدة فوائد؛أولاً، أعتقد أن كل مطور أعمال يجب أن يقرأ كتاب Rocky Lhotka عن برمجة Business Objects.لقد وجدته شخصيًا ضمن أفضل 3 كتب برمجة على الإطلاق.CSLA هو إطار عمل يعتمد على هذا الكتاب واستخدامه يمنح مشروعك إمكانية الوصول إلى وظائف عالية المستوى جدًا مثل التراجع على مستوى n وقواعد التحقق من الصحة وهندسة قابلية التوسع مع توفير التفاصيل لك.لاحظ أنني قلت "تقديم" وليس "إخفاء".لقد وجدت أن أفضل جزء من CSLA هو أنه يجعلك تفهم كيفية تنفيذ كل هذه الأشياء وصولاً إلى كود المصدر دون أن تضطر إلى إعادة إنتاجها بنفسك.يمكنك اختيار استخدام العديد أو القليل من الميزات التي تحتاجها، لكنني وجدت أنه من خلال الالتزام بأنماط التصميم الخاصة بإطار العمل، فإن ذلك يبقيك بعيدًا عن المشاكل.--بايرون

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

لقد كنت أستخدم CSLA منذ الإصدار vb5، عندما كان عبارة عن مجموعة من الأنماط أكثر من كونه إطار عمل.مع تقديم .NET، تحولت CSLA إلى إطار عمل متكامل، يأتي مع منحنى تعليمي ضخم.ومع ذلك، يتناول CSLA العديد من الأشياء التي يميل جميع مطوري الأعمال إلى كتابتها بأنفسهم في مرحلة ما (اعتمادًا على نطاق المشروع):منطق التحقق من الصحة، منطق المصادقة، وظيفة التراجع، المنطق القذر، إلخ.كل هذه الأشياء تحصل عليها مجانًا في إطار واحد جميل.

كما ذكر آخرون، كونه إطار عمل، فإنه يجبر المطورين على كتابة منطق الأعمال بطريقة مماثلة.كما أنه يفرض عليك توفير مستوى من التجريد لمنطق عملك، بحيث لا يصبح عدم استخدام إطار عمل واجهة المستخدم مثل MVC وMVP وMVVM أمرًا مهمًا.

في الواقع، أود أن أزعم أن السبب وراء ارتفاع عدد كبير جدًا من أنماط واجهة المستخدم هذه اليوم (في عالم Microsoft) هو أن الأشخاص كانوا يفعلون أشياء خاطئة بشكل لا يصدق لفترة طويلة (على سبيل المثال، استخدام DataGrids في واجهة المستخدم الخاصة بك، والرش منطق عملك في كل مكان.تسك تسك).صمم الطبقة الوسطى الخاصة بك (منطق الأعمال) بشكل صحيح من البداية، ويمكنك إعادة استخدام الطبقة الوسطى الخاصة بك في أي واجهة مستخدم.نموذج Win، ASP.NET/MVC، خدمة WCF، WPF، Silverlight**، خدمة Windows، ....

لكن بصرف النظر عن ذلك، فإن المردود الكبير بالنسبة لي هو القدرة المدمجة على التوسع.يستخدم CSLA نمط وكيل يمكن تكوينه عبر ملف التكوين الخاص بك.يتيح ذلك لكائنات عملك إجراء مكالمات عن بعد من خادم إلى خادم، دون الحاجة إلى كتابة نقرة واحدة من التعليمات البرمجية.هل تريد إضافة المزيد من المستخدمين إلى نظامك؟لا توجد مشكلة، قم بنشر كائنات أعمال CSLA الخاصة بك إلى خادم تطبيق جديد، وقم بإجراء تغيير في إدخال ملف التكوين، وBAM!!تم تلبية احتياجات قابلية التوسع الفورية.

قارن هذا باستخدام DTO، وتخزين منطق عملك على العميل (أيًا كان العميل)، والاضطرار إلى كتابة كل طريقة من طرق CRUD الخاصة بك كطرق خدمة.نعم!!!لا أقول إن هذا أسلوب سيئ، لكنني لا أريد القيام به.ليس عندما يكون هناك إطار عمل للقيام بذلك بشكل أساسي من أجلي.

سأكرر ما قاله الأشخاص الآخرون بأن CSLA ليس ORM.يفرض عليك CSLA تزويد كائنات عملك بالبيانات.إنهم لا يهتمون من أين تحصل على بياناتك.يمكنك استخدام ORM لتزويد كائنات الأعمال الخاصة بك بالبيانات.يمكنك أيضًا استخدام ADO.NET الخام، والخدمات الأخرى (RESTFUl، SOAP)، وجداول بيانات Excel، ويمكنني الاستمرار هنا.

أما بالنسبة لدعمك لـ TDD، فلم أحاول مطلقًا استخدام هذا النهج مع CSLA أيضًا.لقد اتبعت النهج الذي أقوم فيه بتصميم الطبقة الوسطى (كائنات الأعمال أيضًا) باستخدام الرسوم البيانية للفئة والتسلسل، مما يسمح في أغلب الأحيان بحالة الاستخدام و/أو الشاشة و/أو تصميم العملية للإملاء.ربما كانت مدرسة قديمة بعض الشيء، ولكن UML خدمتني دائمًا بشكل جيد جدًا في جهودي في التصميم والتطوير.لقد نجحت في تصميم وتطوير تطبيقات كبيرة جدًا وقابلة للتطوير ولا تزال تُستخدم حتى اليوم.وحتى ينضج WCF RIA، سأستمر في استخدام CSLA..

** مع بعض الأعمال

أنا جديد في CSLA ولكنني أفهم المفاهيم وأدرك بالفعل أنها ليست أداة ORM، لذا توقف عن الضرب على الطبول اللعينة.هناك ميزات CSLA تعجبني ولكن استخدامها يبدو كما لو أن هناك ساحرًا خلف الستار.أعتقد أنه إذا كنت لا تمانع في عدم معرفة كيفية عمله، فيمكنك استخدام الكائنات وهي تعمل بشكل جيد.

هناك منحنى تعليمي كبير للمبتدئين وأعتقد أنه سيستفيد كثيرًا من خلال 5-15 دقيقة.مقاطع فيديو مثل Microsoft لتعلم الأساسيات.أو ماذا عن إصدار كتاب مصاحب يحتوي على الكود بدلاً من إصدار الكود واستغرق شهورًا لإصدار الكتاب؟فقط أقول السيد لوهتكا...لقد بدأنا في بناء أغراضنا قبل صدور الكتاب وكنت أعاني طوال الوقت.ولكن كما قلت، أنا جديد على ذلك.

استخدمنا CSLA.لقد جعلنا أغراضنا تناسب القالب ثم استخدمنا 10% مما يقدمه إطار العمل.التراجع عن مستوى الكائن؟لم استخدمه.مرونة الطبقة؟لم استخدمه.لقد انتهى بنا الأمر بكتابة ما يكفي من كود قواعد العمل الذي اعتقدت أن الشيء الوحيد الذي كنا نخرجه من CSLA هو التعقيد.استخدمه بعض المطورين "الطويلين في السن" الذين يعرفون الإطار كمطرقة لأن لديهم مسمارًا يحتاج إلى الضرب.كان CSLA في حزامهم وأعتقد أن الكثير من مؤيدي إطار العمل يرون الأشياء من هذا المنظور أيضًا.

أعتقد أن مطورينا المتمرسين سعداء لأن كل هذا منطقي بالنسبة لهم.أعتقد أنه إذا لم يكن لدى مؤسستك مبرمجون مبتدئون وشعرتم يا رفاق بالملل من كتابة كائنات POCO فعالة وبسيطة بأنماط جيدة التكوين، فافعلوا ذلك.استخدم CSLA.

أنا أستخدم CSLA كإطار عمل لكائن الأعمال لمشروع متوسط ​​الحجم.لقد قطع إطار العمل شوطًا طويلاً منذ أيام VB6 ويوفر قدرًا غير عادي من المرونة ووظيفة "خارج الصندوق".تجعل الكائنات الذكية المحمولة الخاصة بـ CSLA تطوير واجهة المستخدم أسهل بكثير.ومع ذلك، فأنا أتفق مع الآخرين على أنها ليست الأداة المناسبة لكل موقف.من المؤكد أن هناك بعض النفقات العامة، ولكن هناك أيضًا الكثير من القوة.أنا شخصياً أتطلع إلى استخدام CSLA Light مع Silverlight.

الايجابيات:

  • تكنولوجيا البيانات الحيادية1
  • قاعدة تثبيت كبيرة وهي مجانية!!
  • إطار مستقر ومنطقي
  • يمكن أن يكون رمز الوصول إلى البيانات موجودًا في كائناتك أو في مجموعة منفصلة
  • التحقق من صحة الملكية والكائن والترخيص

سلبيات

  • يمكن أن يكون هناك الكثير من التعليمات البرمجية التي يجب الحفاظ عليها2
  • ربما تحتاج إلى مولد أكواد لاستخدامه بفعالية
  • منحنى التعلم.من السهل فهم بنية كائنات CSLA، لكن التحذيرات يمكن أن تسبب الصداع.


لست متأكدًا من التصميم القائم على الاختبار.لا أقوم باختبار الوحدة أو التصميم القائم على الاختبار (عار علي)، لذلك لا أعرف ما إذا كانت اختبارات الوحدة مختلفة عن TDD، لكنني أعلم أن أحدث إصدار من إطار العمل يأتي مع اختبارات الوحدة.


1 شيء جيد لأن تقنيات الوصول إلى البيانات لا تبقى كما هي لفترة طويلة.
2 لقد أصبح هذا أفضل مع الإصدارات الأخيرة من الإطار.

يوصي الكثير من الأشخاص باستخدام Code Generation مع CSLA.أوصي بمراجعة مجموعتنا من القوالب المدعومة لأنها ستزيد عائد استثمارك بشكل كبير.

شكرا -blake niemyjski (مؤلف كتاب " قوالب CodeSmith CSLA)

لقد استخدمته لمشروع قبل بضع سنوات.ولكن عندما تم الانتهاء من المشروع، لم أتمكن من إخبار أي شخص بما فعلته CSLA بالنسبة لي.بالتأكيد، لقد ورثت من فئاتها.لكنني تمكنت من إزالة هذا الميراث من جميع الطبقات تقريبًا دون إعادة الهيكلة.لم يكن لدينا أي فائدة لأشياء N-Tier.كان التراجع على المستوى n بطيئًا جدًا لدرجة أننا لم نتمكن من استخدامه.لذا أعتقد أنه في النهاية ساعدنا فقط في تصميم فصولنا.

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

أنا رجل PHP.عندما بدأنا في بناء تطبيقات واسعة النطاق نسبيًا باستخدام PHP، بدأت البحث في الكثير من أطر التطبيقات وORMs بشكل أساسي في عالم PHP، ثم في Java و.NET.السبب الذي جعلني ألقي نظرة على أطر عمل Java و.NET لم يكن الاستخدام الأعمى لأي إطار عمل PHP، ولكن حاول أولاً فهم ما يحدث بالفعل، ونوع البنى الموجودة على مستوى المؤسسة.

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

يمكنك العثور على محادثاته على dotnetrocks.com/archives.aspx ومقاطع الفيديو من dnrtv.com/archives.aspx (ابحث عن Lhotka).

byron ما هما الكتابان الآخران اللتان أعجب اللتان تحبهان؟

جون،

لدينا فرق تعمل في CSLA من 2 إلى 3.5 ووجدنا أنها طريقة رائعة لتوفير إطار عمل متسق بحيث يقوم جميع المطورين "بالقيام بذلك بنفس الطريقة".إنه لأمر رائع أن يتم إنشاء معظم الأكواد ذات القيمة المنخفضة ونعلم أنه عندما نجري اختبارات الوحدة فإنها تعمل خارج الصندوق لجميع عناصر CRUD.لقد وجدنا أن TDD الخاص بنا يأتي بالفعل مع إعادة البناء التي نقوم بها للتصميم، ولا يمنعنا CSLA من القيام بأي من ذلك.

كريس

لقد حاولت آخر مرة استخدام CSLA في أيام العصر الحجري لـ VB6.في وقت لاحق، كان من الممكن أن يكون أكثر فعالية لو كنت قد استخدمت توليد التعليمات البرمجية.إذا لم يكن لديك أدوات فعالة لإنشاء التعليمات البرمجية وإستراتيجية لملاءمتها في سير عملك، فيجب عليك تجنب أطر عمل مثل CSLA، وإلا فإن الميزات التي تحصل عليها من CSLA لن تعوض مقدار الوقت الذي تقضيه في كتابة السطور من التعليمات البرمجية لكل جدول، وعدد n من أسطر التعليمات البرمجية لكل عمود، وما إلى ذلك.

لقد استخدمت CSLA.NET في عدد قليل من المشاريع الآن، وقد كان أكثر نجاحًا في تطبيق نماذج Windows الذي يحتوي على توافقات غنية لربط البيانات (والتي لا تمتلكها تطبيقات asp.net).

المشكلة الرئيسية هي دعم TDD كما أشار الناس، وذلك بسبب سلوك الصندوق الأسود لوظائف Dataportal_XYZ وعدم قدرته على السماح لنا بالسخرية من كائنات البيانات.كانت هناك جهود لحل هذه المشكلة مع هذا كونه أفضل نهج

كنت أرغب في استخدامه، لكن المطور الرئيسي في ذلك الوقت كان لديه فكرة مفادها أن هناك الكثير من "السحر"...

CSLA هو أفضل إطار تطبيق موجود.Rocky LHotka هو رجل ذكي جدًا ولكنه ذكي جدًا.إنه يكتب تاريخ تطوير البرمجيات مثل مارتن فاولر، وديفيد إس بلات، لكن كتابي المفضلين هم رود ستيفنز، وماثيو ماكدونالدز، وجيف ليفينسون، وثيرون ويليس، ولويس ديفيدسون المعروف باسم دكتور إس كيو إل.:-) الايجابيات:يتم تطبيق جميع أنماط التصميم.سلبيات:من الصعب التعلم، وعينات قليلة.

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