نکته ای در بابِ محاسبهء پیچیدگیِ نگاشتِ اشیاء
پنجشنبه 9 اردیبهشت 1400
عُلَما، فُضَلا، عُقَلا، عُرَفا و غیره...
اگر در پروژههایتان DTOهای مستقل از Data Entity و View Model و ... دارید، بدانید و آگاه باشید که عملیاتِ نگاشتِ مقادیر بین انواعِ این مدلها، با پیچیدگیِ حداقلیِ n3 اِعمال میشودها...
فرض کنید در یک پروژه با معماری چند لایه یا ...، قرار است با EF Core یا هر نوع Data Access دیگری، تعداد R رکورد را از پایگاه داده یا مخزنِ دادهها یا هر منبع مفروضِ دیگری بازیابی کنید.
خودِ آن مولفهء Data Access با پیچیدگی n3 عملیاتِ نگاشتِ مقادیرِ فیلدهای رکوردهای بازیابی شده به Entityها را انجام میدهد. اگر در لایهء بالاتر، Data-Object متفاوتی داشته باشید، مجدداً عملیات نگاشت مقادیر _با پیچیدگی n3_ انجام میشود تا دادهها برای انتقال به لایهء بالاتر آماده شوند؛ در لایه-های بالاتر نیز این داستان به همین منوال ممکن است ادامه داشته باشد تا برسیم به آخرین لایه و View Modelها.
به زبان ریاضی، میشود:
O(R) = L × O(Map(r)) × R | R: record count | L: layers count |
O(Map(r)) = n3 | r: single record | n: field count |
بطور مثال، برای بازیابی 1,000 رکورد از یک جدول 10 فیلده، در یک نرمافزارِ مبتنی بر معماریِ 3 لایه، حداقل 3,000,000 بار عمل نگاشتِ مقدارِ فیلد اجرا میشود تا دادهها برای ارائه به کاربر آماده شوند. تازه خودِ عملِ نگاشت، بسته به نوع دادهء نگاشت یافته، میتواند پیچیدگیهای خاصِ خود را داشته باشد.
O(1,000) = 3 × O(Map(10)) × 1,000 = 3 × 103 × 1,000 = 3 × 1000 × 1,000 = 3,000,000
خلاصه که سعی کنید در پروژههاتون رادیکالیستی اصولگرا نباشید