نقل قول نوشته شده توسط bftarane مشاهده تاپیک
یه سوال در همین رابطه با توجه به جوابی که دوستان دادن، آیا اینکه با استفاده از ریپازیتوری پترن و Unit of work پروژه رو پیش ببریم آیا معماری سه لایه پیاده شده، حتی بدون اینکه بخواهیم به ازای هر لایه یک Class library ایجاد کنیم؟(در واقع فقط یک پروژه داریم که شامل تعدادی کلاس repository و کلاس unit of work باشه)
وقتی شما ریپوزیتوری و Unit Of Work به پروژه اضافه میکنید خود به خود پروژه ی شما سه بخش میشه
لایه UI و Data و Business ، البته باید از تزریق وابستگی هم است استفاده کنید.

استفاده از Class Library مجزا فقط راهی برای جدا سازی کدها و سازماندهی اونهاست. ربطی به چند لایه شدن پروژه نداره. در سی شارپ همه چیز درون namespace تعریف میشه. تا زمانی که شما از Namespace مجزا برای یک سری از کلاسها استفاده می کنید اون کلاسها در یک لایبراری جدا قرار دارن (هرچند که از نظر فیزیکی اینطور به نظر نرسه و کدها عملا کنار هم باشن)

در پروژه ها وب کمتر پیش میاده که یک Class library در پروژه ها دیگه قابل استفاده باشه. کد مورد نظر خیلی باید کلی و عمومی باشه که در جای دیگه کاربرد داشته باشه.
بهتره حداقل از دو پروژه ی مجزا استفاده کنید. یکی برای وب و دیگری برای سایر چیزها. دلیل عمده اینه که پروژه ی وب از Package های عمدتا متفاوتی استفاده میکنه .

شما می توانید هر قسمت از پروژه رو درون کلاس های جدا قرار بدید یا اونها رو درون فولدر قرار بدید.
به خاطر داشته باشید که هر زمان می توانید یک Folder رو تبدیل به کلاس جدا کنید و به پروژه ی خودش منتقل کنید. (با کپی و پیست) یا بر عکس یک کلاس مجزا رو درون یک Folder قرار بدید. این انتخابی نیست که در زمان طراحی اهمیت داشته باشه. من معمولا با فولدرها کار میکنم. تا جایی که چیزی باعث بشه نیاز به پروژه های مجزا پیش بیاد.

خیلی از پروژه های حرفه ای از کلاسهای مجزا استفاده میکنند. علتش اینه که تیم های متفاوتی روی قسمتهای مختلف کار میکنند و هدف اینه که بشه هر قسمت رو به صورت مجزا توسعه داد و تست کرد. اما در تیم های کوچک یا وقتی تنها روی پروژه کار میکنید تاثیر زیادی نداره و کار شمارو پیچیده میکنه.

مثلا در ASP MVC اگر برای قسمت های مجزا لایبراری جدا درست کنید یک مشکل همیشه دارید که باید Identity و Entity framework رو در همه ی پروژه ها نصب کنید. در واقع اگر شما به پروژه ای رفرنس بدید که از یکی از این دو استفاده میکنه باید حتما پکیج کاملش رو هم نصب کنید. این مسئله کار آسانیه ولی نفس جدا سازی پروژه رو از بین میبره. نفس اینکه ما پروژه هایی داشته باشیم که فقط به منابع مورد نیازشون دسترسی داشته باشن. البته در دات نت Core این مسئله برطرف شده و رفرنس ها بدون نصب مجدد پاس داده میشن

من با Solution هایی که کار کردم که شامل 30 پروژه ی مجزا میشدن و پروژه هایی که با وجود بزرگی درون دو پروژه پیاده شده بودن و با فولدر طبقه بندی شده بودن. اما با توجه به اینکه تیم برنامه نویسی هیچوقت از 5 یا 6 تجاوز نکرد عملا نیازی به پروژه های مجزا نبود. مدیریت کردن سولوشن با دو پروژه خیلی ساده تر بود.