روش سوم: DTO (Data transfer objects)
در قسمتهای قبلی دو روش از روشهای موجود جهت تبادل دادهها بین لایهها، ذکر گردید و علاوه بر این، مزایا و معایب هر کدام از آنها نیز ذکر شد. در این قسمت دو روش دیگر، به همراه مزایا و معایب آنها برشمرده میشود. لازم به ذکر است هر کدام از این روشها میتواند با توجه به شرایط موجود و نظر طراح نرم افزار، دارای تغییراتی جهت رسیدن به یکسری اهداف و فاکتورها در نرم افزار باشد.
در این روش ما سعی میکنیم طراحی کلاسها را به اصطلاح مسطح ( flatten) کنیم تا بر مشکل double loop که در قسمت قبل بحث کردیم غلبه کنیم. در کد ذیل مشاهده میکنید که چگونه کلاس CusomerDTO از CustomerEntity ، مشتق میشود و کلاس Address را با CustomerEntity ادغام میکند؛ تا برای افزایش سرعت لود و نمایش دادهها، یک کلاس de-normalized شده ایجاد نماید.
public class CustomerDTO : CustomerEntity { public AddressEntity _Address = new AddressEntity(); }
در کد ذیل میتوانید مشاهده کنید که چگونه با استفاده از فقط یک loop یک کلاس de-normalized شده را پر میکنیم.
foreach (DataRow o1 in oCustomers.Tables[0].Rows) { CustomerDTO o = new CustomerDTO(); o.CustomerCode = o1[0].ToString(); o.CustomerName = o1[1].ToString(); o._Address.Address1 = o1[2].ToString(); o._Address.Address2 = o1[3].ToString(); obj.Add(o); }
UI هم به راحتی میتواند DTO را فراخوانی کرده و دیتا را دریافت کند.
مزایا و معایب روش DTO
یکی از
بزرگترین مزایای این روش سرعت زیاد در بارگذاری اطلاعات، به دلیل استفاده کردن از ساختار de-normalized میباشد. اما همین مسئله خود یک عیب محسوب میشود؛ به این دلیل که اصول شئ گرایی را نقض میکند.
روش چهارم: Hybrid approach (Entity + DTO)
از یک طرف کلاسهای Entity که دنیای واقعی را مدل خواهند کرد و همچنین اصول شئ گرایی را رعایت میکنند و از یک طرف دیگر DTO نیز یک ساختار flatten را برای رسیدن به اهداف کارآیی دنبال خواهند کرد. خوب، به نظر میرسد که بهترین کار استفاده از هر دو روش و مزایای آن روشها باشد.
زمانیکه سیستم، اهدافی مانند انجام اعمال CRUD را دنبال میکند و شما میخواهید مطمئن شوید که اطلاعات، دارای integrity میباشند و یا اینکه میخواهید این ساختار را مستقیما به کاربر نهایی ارائه دهید، استفاده کردن از روش (Entity) به عنوان یک روش normalized میتواند بهترین روش باشد. اما اگر میخواهید حجم بزرگی از دیتا را نمایش دهید، مانند گزارشات طولانی، بنابراین استفاده از روش DTO با توجه به اینکه یک روش de-normalized به شمار میرود بهترین روش میباشد.
کدام روش بهتر است؟
Non-uniform : این روش برای حالتی است که متدهای مربوط به data access تغییرات زیادی را تجربه نخواهند کرد. به عبارت دیگر، اگر پروژهی شما در آینده دیتابیسهای مختلفی را مبتنی بر تکنولوژیهای متفاوت، لازم نیست پشتیبانی کند، این روش میتواند بهترین روش باشد.Uniform : Entity, DTO, or hybrid : اگر امکان دارد که پروژهی شما با انواع مختلف دیتابیسها مانند Oracle و Postgres ارتباط برقرار کند، استفاده کردن از این روش پیشنهاد میشود.