我遇到以下MVC设计模式问题,并且困惑该走哪条路。
在UI层中,控制器操作方法中使用了视图模型。凉爽的。
服务层使用请求-响应消息模式,因此服务类方法将请求对象作为参数(输入),并且该方法返回响应对象(输出)。此方法调用带有Domain对象参数的Repository方法。换句话说,要调用service方法,需要用数据填充Request对象,然后该方法在Response对象中返回结果,即请求-响应消息传递。
要将视图模型中的数据传递给Service方法中的Domain对象,您有两个选项AFAIK:
我发现这两种方法都有缺陷...
在选项1中,如果视图模型具有许多属性,并且您正在使用映射器(例如AutoMapper),则需要在Controller方法中将属性从视图模型自动映射到Request对象。然后在Service层的service方法中,您需要将Request对象中的属性自动映射到Domain对象。两个级别的映射-非常错误!
在选项2中,请求对象包含一个包含视图模型的属性。然后,您可以轻松高效地将Request.vm(属性)自动映射到Domain对象,但是出于某种原因,这对我来说似乎是糟糕的设计!我担心这种设计。
哪种方法最好?还是在VM和RR模式之间映射还有另一种更好的方法?
请求/响应是一种消息传递模式,但是您似乎没有使用消息。而是使用了对象。这是您问题的真正症结所在。您使用的模式不正确,更重要的是,您似乎在为作业使用了错误的模式。为什么在这种情况下需要消息传递?对于简单的多层应用程序来说,这只是额外的开销。
如果您确实想使用消息传递,则可能应该将数据序列化为json或xml,将其传递给服务,然后将数据反序列化为该层中使用的任何对象。这样,您不需要对另一层的数据类型有任何依赖性,因为(反序列化)过程不一定需要此类依赖性。
就个人而言,我会避免整个消息传递方面,而是拥有一个在视图模型和域对象之间进行映射的映射层,然后使用域对象调用服务层。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句