Ние пишем MVC приложение за поддръжка на данни е част от по-голям проект. Опитваме се да използваме управляван от домейн дизайн DDD. Вече има други въпроси относно това в SO, като тук, тук и тук. Но те не отговарят напълно на въпроса ми.
Имаме и ограничени контексти в слоя данни, тъй като базата данни има 755 таблици. Така създадохме ограничени контексти за бизнес, роли, продукти, клиенти и т.н.
Проблемът, който имаме, е, че в приложението MVC имаме изглед за „първоначална настройка“, който използва ViewModel, който в крайна сметка обхваща множество ограничени контексти (използване на шаблон IUnitOfWork в Entity Framework 6). Следователно този изглед трябва да се съобразява с бизнес контекста и контекста на ролите.
Моделът на домейна ще има Business
модел и Address
модел и няколко други модела в по-голяма pbject графика.
ViewModel е сплескан, опростен модел на тези два и други модели на домейн:
public class InitialSetupViewModel
{
string BusinessName{get;set;}
string Street{get;set;}
string Street2{get;set;}
string State{get;set;}
string ZIP{get;set;}
...
}
Този ViewModel трябва да съответства на моделите на домейна, което правим с Automapper.
Контролерът инжектира услугата за домейн:
public class SetupController : Controller
{
private readonly IMaintenanceService service;
public SetupController( IMaintenanceService maintenanceService = null )
{
service = maintenanceService;
}
public void Create(...????....)
{
service.CreateBusiness(..?.);
}
}
проблеми:
Услугата не може да знае за
InitialSetupViewModel
, така че какво трябва да се предаде на услугата?Службата трябва да знае за
BusinessDbContext
иRolesDbContext
. Така че трябва да извикам SaveChanges() и на двете, което надхвърля целта на един IUnitOfWork. Трябва ли да създам още един UnitOfWork, който включва както бизнес, така и роли?
Не мисля, че е оправдано да се комбинират тези два IUnitOfWorks в едно само за да може този MVC изглед да работи. Но какво е решението?
Благодаря ти!
Create
метод на действие на контролера ще приеме вашия модел на изглед, който след това ще конвертирате в DTO и ще го предадете на вашата услуга - person Vsevolod Goloviznin   schedule 02.12.2014