ما هي المشاكل التي هي من السهل على الفور في الرسم البياني التبعية؟

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

  •  03-07-2019
  •  | 
  •  

سؤال

ما هي الأشياء التي يجب أن تبحث عنه عندما إنتاج الرسم البياني التبعية؟

وأو بعبارة أخرى، ما هي خصائص رسم بياني حسن المظهر مباراة سيئة واحدة؟

وتحرير: السياق هنا هو أول نظرة لي في المجالس بلدي في NDepend

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

المحلول

والمشكلة الأكبر يمكنك بقعة هي بالتأكيد تبعيات دورات. الأداة NDepend تقترح على مصفوفة الاعتماد و<لأ href = "HTTP: // شبكة الاتصالات العالمية .ndepend.com / Doc_VS_Arch.aspx "يختلط =" نوفولو noreferrer "> الاعتماد على الرسم البياني التي من شأنها أن تساعد على الفور <لأ href =" http://www.ndepend.com/Doc_VS_Arch.aspx#Cycle "يختلط = "نوفولو noreferrer"> cyles الاعتماد . تنويه: أنا واحد من المطورين من الأداة

لاحظ أن المصفوفة التبعية وأكثر من ذلك بكثير تكييفها من الرسم البياني على الفور دورات. لأن دورة تجنب مصفوفة ليكون الثلاثي.

ونطاقات أخرى من المشاكل قريبة إلى بنية التطبيق الخاص بك: على سبيل المثال، هل من الطبيعي أن يستخدم واجهة المستخدم مباشرة DB؟ أو ما هو أسوأ من ذلك بكثير، وDB يعتمد على واجهة المستخدم؟

ويمكنك إرسال قواعد التعليمات البرمجية عبر الاستفسارات LINQ (CQLinq) للتحقق من وجود محرم التبعيات. وفيما يلي قاعدة الاختيار التعليمات البرمجية التي أنواع UI يجب عدم استخدام مباشرة أنواع DB:

// <Name>UI layer shouldn't use directly DB types</Name>
warnif count > 0

// UI layer is made of types in namespaces using a UI framework
let uiTypes = Application.Namespaces.UsingAny(Assemblies.WithNameIn("PresentationFramework", "System.Windows", "System.Windows.Forms", "System.Web")).ChildTypes()

// You can easily customize this line to define what are DB types.
let dbTypes = ThirdParty.Assemblies.WithNameIn("System.Data", "EntityFramework", "NHibernate").ChildTypes()
              // Ideally even DataSet and associated, usage should be forbidden from UI layer: 
              // http://stackoverflow.com/questions/1708690/is-list-better-than-dataset-for-ui-layer-in-asp-net
              .Except(ThirdParty.Types.WithNameIn("DataSet", "DataTable", "DataRow"))

from uiType in uiTypes.UsingAny(dbTypes)
let dbTypesUsed = dbTypes.Intersect(uiType.TypesUsed)
select new { uiType, dbTypesUsed }

نصائح أخرى

ورسم بياني اعتماد ماذا؟ الطبقات؟ الإجراءات المخزنة؟

ودورات سيئة ...

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

وأنا لا يعرف ما يظهر ولكن الأعمال الفنية التي تميل للوصول الى العديد من الأقسام (خاصة أقسام لا علاقة لها) من التعليمات البرمجية NDepend من شأنه أن يكون سيئا (IMHO). لقد فكرت في أنه "مدونة السرطان".

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

وأيضا أود أن ننظر في تعقيد العام للكل قسم .. هم مع خطوط من جميع أنحاء المشتبه بهم.

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