نکتهای که گفتی دربارهی مدیریت روابط بین دادهها در سیستمهای نرمافزاری مثل Odoonix خیلی مهمه. بذار به زبان ساده برات توضیح بدم:
مدیریت سادهتر روابط بین دادهها
وقتی چند مدل داده (مثل مشتری، سفارش، محصول) داریم، معمولاً بینشون رابطههایی وجود داره. بهترین روش اینه که اول مدلهای والد (مثل مشتری یا محصول) رو بسازیم و بعد مدلهای وابسته (مثل سفارش) رو به اونها وصل کنیم.
برای این کار فقط دو نوع رابطه کافی هست:
- many2one: یعنی هر سفارش به یک مشتری وصل میشه.
- many2many: مثلاً یک محصول میتونه در چند سفارش باشه و بالعکس.
با این روش، فقط همین دو نوع رابطه رو باید مدیریت کنیم، نه بیشتر.
همزمانسازی دادهها و چالش والدها
وقتی دادهها رو از جایی دیگه وارد میکنیم یا همزمانسازی میکنیم، باید مطمئن باشیم که اول والدها ساخته شدهاند. مثلاً نمیتونیم سفارشی رو ثبت کنیم که هنوز مشتریاش وجود نداره.
راهحل هوشمند در Odoonix
در Odoonix، یه روش پیشرفته استفاده شده که بر پایهی:
- AOP (برنامهنویسی جنبهگرا)
- الگوی طراحی تزئینی (Decorative Design Pattern)
هست. این روش کمک میکنه تا وابستگیها به صورت خودکار مدیریت بشن.
یعنی چی؟ یعنی:
- شما فقط مشخص میکنید که مثلاً «مشتری باید قبل از سفارش ثبت بشه».
- سیستم خودش تضمین میکنه که این ترتیب رعایت بشه.
- با استفاده از pre-process و post-process میتونید تعیین کنید چه چیزی قبل یا بعد از چی اجرا بشه.
مثال ساده
فرض کن میخوای اطلاعات فروش رو وارد کنی. با این روش، سیستم خودش اول چک میکنه که اطلاعات مشتری وجود داره یا نه. اگر نبود، اول مشتری رو ثبت میکنه، بعد میره سراغ ثبت فروش.
اگه خواستی، میتونم یه نمودار یا مثال کدی هم برات بیارم تا بهتر جا بیفته. دوست داری؟
برای فیلدهای رابطهای many2many و one2many که به صورت لیست هست، روش نگاشت فرزند و یا Children Mapper کار میکنه. اما برای حالت Many2one نمیدونم چه راهی در نظر گرفته شده.
استفاده از تابعهایی مثل m2o_to_external و external_to_m2o و follow_m2o_relations هم فرضیاتی دارد که باید حتما در پیاده سازی در نظر گرفته شود. من هنوز متوجه نشدم که فرضیاتی که در این موارد در نظر گرفته شده چی هست.