我的asp.net控制器操作将FormCollection作为参数。
然后我遍历我自己的集合,在表单集合中查找值等等。
我将所有代码移动到我的业务逻辑层,并在我的操作中调用我的业务逻辑层,如:
SomeManager.Update(formCollection);
但是我感觉有点厌倦了将formcollection传递给我的业务逻辑层。
我真的有选择吗?还有其他想法吗?
还是完全没问题?
答案 0 :(得分:8)
您的业务逻辑层实际上是您的域模型,域模型应该以技术无关的方式表达;即不依赖于任何特定技术,如ASP.NET MVC,WPF,WCF,EF,NHibernate等等。
最好是将域模型表示为 POCOs (普通旧CLR对象),但是,正如您已经怀疑的那样,这会排除FormCollections和其他ASP.NET MVC特定类型。< / p>
如果能够将Update方法表示为将域对象列表作为输入的方法,那会更好。
这意味着您需要将FormCollection转换为强类型域对象,然后再将其传递给update方法。你需要Mapper才能做到这一点。您可以编写自己的自定义映射器,也可以使用AutoMapper。
答案 1 :(得分:3)
经验法则是,您不应在业务层或更低层中引用System.Web.XXX中的任何内容。在这种情况下,您可以使用自定义模型绑定器来远离使用FormCollection。
有关创建模型绑定器的更多信息,请参阅this post。
答案 2 :(得分:0)
为什么不创建某种dto(数据传输对象)然后填充然后传递它。它会更清洁。
答案 3 :(得分:0)
我会创建一个mapper类,它接受一个FormCollection并返回一个实例,或者更新一个类的实例。
ManagerMapper.Create(的FormCollection) 要么 ManagerMapper.Update(SomeManager,formcollection)