В этом примере, если ваш проект Mvc пропал и заменен проектом Wpf, остальные ваши функции по-прежнему доступны. Если у вас есть оба проекта, они могут ссылаться на основные функции. Имейте реализацию, которая не имеет отношения к UI (MVC или WPF) в других проектах. Таким образом, эти проекты пользовательского интерфейса могут ссылаться на эту функциональность.
public interface IConverter<TDataModel, TModel> { TModel MapToDomain(TDataModel source);}
public interface IPersonConverter : IConverter<PersonEntity, Person> { }
public interface IPersonRepository { Person GetById(int id); }
public class PersonConverter : IPersonConverter
{
public Person MapToDomain(PersonEntity source)
{
return new Person { ID = source.ID, Name = source.Name };
//or use an AutoMapper implementation
}
}
public class PersonRepository : IPersonRepository
{
private readonly IPersonConverter _personConverter;
public PersonRepository(IPersonConverter personConverter)
{
_personConverter = personConverter;
}
public Person GetById(int id)
{
PersonEntity personEntity = new PersonEntity(); //get from storage
return _personConverter.MapToDomain(personEntity);
}
}
public class MvcController
{
private readonly IPersonRepository _personRepository;
public MvcController(PersonRepository personRepository)
{
_personRepository = personRepository;
}
public ActionResult SomeMethod(int id)
{
Person person = _personRepository.GetById(id);
//make your view model based on the person domain model
//with another convert / map, to fit view as personForm
//(if this is overkill you can use person).
return View(personForm);
}
}
Проект Mvc или Wpf
- PersonForm (пользовательская модель)
- Контроллер или класс Wpf
- Person -> Конвертер PersonForm
- Элемент списка
Основной проект
- Человек
- IPersonRepository
Инфраструктурный проект
- Персональный репозиторий
- Лицо субъекта
- Таблица Azure Person
- Контекст хранения