Вы бы поступили точно так же, как если бы вы делали любое другое приложение ASP.NET MVC.Вы бы просто предоставили реализацию своего репозитория, которая бы вызывала службу WCF.Таким образом, в основном интерфейс репозитория может быть контрактом на эксплуатацию, который вы получили при импорте службы:
public interface IProductsService
{
IEnumerable<Product> GetProducts();
}
Product
и IProductsService
- это доменные объекты, поступающие из вашей службы WCF.В реализации этого интерфейса вы бы делегировали вызов самой службе.Что касается остальной части приложения, ваши контроллеры на самом деле не заботятся, поскольку они слабо связаны:
public class ProductsController: Controller
{
private readonly IProductsService _productsService;
public ProductsController(IProductsService productsService)
{
_productsService = productsService;
}
public ActionResult Index()
{
var products = _productsService.GetProducts();
var productsVm = Mapper.Map<IEnumerable<Product>, IEnumerable<ProductViewModel>>(products);
return View(productsVm);
}
}
Довольно стандартные вещи, и именно так должны выглядеть ваши контроллеры независимо от того, где находятся данныепроисходит от.Как вы можете видеть, если вы всегда разрабатываете свои приложения с абстракциями, вы можете очень легко переключить реализацию этого IProductsService
, который будет внедрен в ваши контроллеры, и с точки зрения приложения ASP.NET MVC это даже не будет иметь никакого значения.Модели представлений должны быть частью веб-интерфейса, поскольку они тесно связаны с представлениями.
Контракты на обслуживание и модели доменов переходят на уровень обслуживания.