我有一个C# MVC应用程序,我按以下方式分解它:
视图 -> 控制器 -> 服务 -> 存储库
我使用瘦控制器的方法,每个视图都有一个唯一的视图模型,该模型从相关服务返回。
快速示例: 视图:/NewAppointment/Step1
其控制器如下所示:
因此,我在整个应用程序中使用了几个不同的服务层,每个层实现了一个独特的接口。当我需要让一个服务层与另一个服务层交互时,我的问题就出现了。在这种情况下,将接口引用传递给服务调用是否更好,还是应该让控制器处理收集所有数据,然后将相关结果传递回服务?
例如:
假设我想通过默认方式使用客户的信息来填充我的视图模型。我看到有两种方法可以实现这一点:
将客户端接口引用传递给约会服务,然后让约会服务调用客户服务中的适当GetCustomer方法......
代码如下:
我使用瘦控制器的方法,每个视图都有一个唯一的视图模型,该模型从相关服务返回。
快速示例: 视图:/NewAppointment/Step1
其控制器如下所示:
public ActionResult Step1()
{
return View(_appointmentService.Step1GetModel() );
}
预约服务层看起来会像这样:
public Step1Model Step1GetModel()
{
return new Step1Model();
}
因此,我在整个应用程序中使用了几个不同的服务层,每个层实现了一个独特的接口。当我需要让一个服务层与另一个服务层交互时,我的问题就出现了。在这种情况下,将接口引用传递给服务调用是否更好,还是应该让控制器处理收集所有数据,然后将相关结果传递回服务?
例如:
假设我想通过默认方式使用客户的信息来填充我的视图模型。我看到有两种方法可以实现这一点:
将客户端接口引用传递给约会服务,然后让约会服务调用客户服务中的适当GetCustomer方法......
代码如下:
private ICustomerService _customerService;
private IAppointmentService _appointmentService;
public ActionResult Step1()
{
var viewModel = _appointmentService.Step1GetModel( _customerService );
return View(viewModel);
}
或者
让控制器处理获取客户的逻辑,然后将结果传递给预约服务。
代码实现:
private ICustomerService _customerService;
private IAppointmentService _appointmentService;
public ActionResult Step1()
{
var customer = _customerService.GetCustomer();
var viewModel = _appointmentService.Step1GetModel( customer );
return View(viewModel);
}
我对哪种方法更好有些犹豫。第一种方法保持了控制器的简洁,但是在约会服务和客户服务之间创建了一种跨服务的依赖关系。第二种方法将更多的逻辑放到了控制器中,但是保持了服务的完全独立性。
有人认为哪种方法更好吗?
谢谢~