سلام خدمت دوستان
به تازگی دارم آموزش های مربوط به Union Architecture و Clean Architecture را میبینم و جدا از مساله کدهای پیاده سازی در هر بخش، موضوع تفکیک پروژه ها و پوشه ها در یک Solution برام ابهام داره. در یکی از آموزش ها تصویر زیر نمایش داده شده:
CleanArchitecture.jpg
در تصویر بالا پروژه ها را به سه گروه تفکیک کرده Web App, Application Core و Infrustructure. حالا سوالاتی برام بوجود آمده که به ترتیب عنوان میکنم:
- در جایی خواندم نام یکی از پوشه ها Application تعریف میشه و ممکنه عبارت Core هم بجاش استفاده بشه. در تصویر بالا گویا این نام با هم استفاده شده. کدام مرسوم هستش؟
- آیا در نامگذاری فضای نام پروژه ها لازم هست که بعد از نام Solution نام پوشه بندی هم اضافه بشه؟ مثلا اگر پروژه ای با نام MyProject.Data داریم آیا لازم هست که بصورت MyProject.Application.Domain تعریف بشه؟
- اگر تفکیک پذیری را بدرستی انجام بدم ولی تمام پروژه های در پوشه قرار نداشته باشه اشکالی داره؟ مثلا تمام پروژه های تصویر بالا مستقیما در Solution باشند و پوشه بندی نشن.
- اگر به هر دلیلی یکی از پروژه ها در پوشه اشتباه قرار داده شده باشه، آیا اصول معماری تمیز نقض میشه؟ یا این مساله سلیقه ای هستش؟ البته منظور این نیست که کلا اساس را تغییر بدم.
- در یکی از آموزش ها میگفت که DTO باید در پروژه UI ایجاد بشه چون لایه سرویس اطلاعات را بر می گردونه و استفاده کننده هستش که تصمیم میگیره از اطلاعات به چه نحوی استفاده کنه. حالا اگر کلاس های DTO را بصورت پروژه جداگانه ایجاد کنم تا همه برنامه های UI از یک ساختار اطلاعاتی پیروی کنند اشکال داره؟ در این صورت هم لایه سرویس و UI می توانند از این کلاس استفاده کنند.
- آیا امکان استفاده از AutoMapper در لایه سرویس امکان پذیر است؟ اگر بله، پس باید لایه DTO رو جدا کنم و به هر دو پروژه Service و UI ریفرنس بدم.
- آیا معماری پیاز و معماری تمیز با هم متفاوت هستند یا هر دو یک مفهوم و هدف دارند؟
اگر دوستان در خصوص ساختار شکست Solution جهت معماری های چند لایه تجربه ای دارند ممنون میشم راهنمایی کنند.