در ادامه قصد داریم یک پروژهی مدیریت هتل را پیاده سازی کنیم. این پروژه، دو قسمتی است. قسمت اول آن یک پروژهی Blazor Server، برای مدیریت هتل مانند تعاریف اتاقها است و پروژهی دوم آن از نوع Blazor WASM، برای مراجعهی کاربران عمومی و رزرو اتاقها است. هدف، بررسی نحوهی کار با هر دو نوع فناوری است. وگرنه میتوان کل پروژه را با Blazor Server و یا کل آنرا با Blazor WASM هم پیاده سازی کرد. در مورد نحوهی انتخاب و مزایا و معایب هرکدام از این فنا ...
Profileهای AutoMapper، قابلیت تزریق وابستگیها را در سازندهی خود ندارند؛ به همین جهت در این مطلب، دو راه حل را جهت رفع این محدودیت بررسی میکنیم. مثال: نیاز به نگاشت کلمهی عبور، به کلمهی عبور هش شده
فرض کنید موجودیت کاربری که قرار است در بانک اطلاعاتی ذخیره شود، چنین ساختاری را دارد: namespace AutoMapperInjection.Entities
{
public class User
{
public int Id { set; get; }
public ...
در قسمت قبل سناریوهای مختلف مرتبط با طراحی موجودیتهای سیستم را بررسی کردیم. در این قسمت به طراحی DTOهای متناظر با موجودیتها به همراه اعتبارسنجهای مرتبط و در نهایت به پیاده سازی سرویسهای CRUD آنها خواهیم پرداخت. قراردادها، مفاهیم و نکات اولیه
برخلاف بسیاری از طراحیهای موجود، بر فراز هر موجودیت اصلی (منظور AggregateRoot) باید یک DTO که از این پس با عنوان Model از آنها یاد خواهیم کرد، تعریف شود. هیچ ...
پیش نیاز این مطلب، قسمت قبل آن است. در قسمت قبل، یک کلاس جنریک را به نام BaseDto ایجاد کردیم که با ارث بری Dtoهای پروژه از این کلاس، علاوه بر متدهای ToEntity و FromEntity جهت ساده سازی عملیات نگاشت، Mappingهای لازم بین Dtoها و Entityهای مربوطه، توسط Reflection به صورت خودکار انجام میشد. در این قسمت میخواهیم مکانیزم Mapping خودکار را کمی تغییر داده و قابلیت سفارشی سازی Mappingها را فراهم کنیم. سورس کامل مثال را میتوانید در ...
آموزش کامل AutoMapper قبلا در سایت ارائه شده است. در این مقاله میخواهیم Mapping نوعهای مختلف بین Dto و Entityهای پروژه را توسط Reflection به صورت خودکار انجام دهیم. سورس کامل مثال را میتوانید در این ریپازیتوری مشاهده کنید. در این روش ما یک کلاس جنریک را به نام BaseDto داریم که تمام Dtoهای ما برای نگاشت خودکار باید از آن ارث بری کنند. در مثال زیر کلاس PostDto لازم است به کلاس Post نگاشت شود. پس خواهیم داشت : public class ...
یکی از چالشهایی که در طراحی زیرساخت برای Domain هایی که تعداد زیادی عملیات CRUD را در back office سیستم خود دارند، داشتن مکانیزمی برای ذخیره سازی اطلاعات Master-Detail یا چه بسا Master-Detail-DetailOfDetail میباشد. در ادامه نحوه برخورد با چنین سناریوهایی را در EF Core و همچنین با استفاده از AutoMapper و FluentValidation بررسی خواهیم کرد. موجودیتهای فرضی public abstract class Entity : IHaveTrackingState
{
...
در این مطلب قصد داریم علاوه بر طراحی زیرساختی برای راه اندازی هرچه سریعتر ServiceLayer، طراحی ای برای مکانیزم Validation به عنوان یک Cross Cutting Concern ، نیز ارائه داده و آن را پیاده سازی کنیم. پیش نیازها: قبلا در سایت در مورد لایه بندی نرم افزار و ServiceLayer مطلب منتشر شده است؛ لذا مطالعه این سری مقالات برگرفته از کتاب Professional ASP.NET Design Patterns جزء پیش نیازهای این مطلب میباشد. دوره Aspect oriented p ...
همانطور که اطلاع دارید، AutoMapper ابزاری برای نگاشت خودکار بین Model و Dto میباشد؛ که به صورت نادرست تصور کاهش سرعت در استفاده کردن از آن، بین توسعه دهندگان جا افتادهاست. در این مقاله قصد داریم به صورت دقیق، به بررسی سرعت عملکرد استفاده از AutoMapper و مقایسه آن با نگاشت دستی بپردازیم. کدهای کامل این قسمت را میتوانید از اینجا clone کرده و شخصا تست نمایید. ابتدا یک پروژهی Console Application را ساخته و AutoMapper را به ه ...
قبل ازاین مقاله، درباره راه اندازی و استفاده از کتابخانه Automapper بحث شده ولی موردی که شاید کمتر به آن توجه
شده سرعت این نگاشت میباشد. در این مقاله با استفاده از نوشتن تست، این موضوع بررسی
میشود. کلاس ساده زیر را در نظر بگیرید که
برای مثال از سمت لایه دسترسی به داده گرفته شده است: public enum PersonType
{
Real =0,
Legal=1
}
public class Person
{
public long PersonId { get; set; }
p ...
در این مقاله قصد دارم به وسیله Autofac تزریق وابستگیهای Automapper و همچنین Register کردن فایلهای Profile Mapper را توضیح دهم. حتما مقالات مقالات متعدد در رابطه با تزریق وابستگی را که در این سایت وجود دارند، مطالعه کردهاید. در این بخش قصد دارم از Autofac ( بجای StructureMap ) برای تزریق Automapper استفاده کنم. 1. ابتدا ساختار پروژه را بررسی میکنیم. بدین منظور یک پروژه جدید را با عنوان AufacDI ایجاد میکنیم. 2. در این مرحله یک پر ...