想将所有业务逻辑移到BLL层,但需要传入formcollection,那是干净的吗?

时间:2009-12-28 21:30:05

标签: asp.net-mvc loose-coupling

我的asp.net控制器操作将FormCollection作为参数。

然后我遍历我自己的集合,在表单集合中查找值等等。

我将所有代码移动到我的业务逻辑层,并在我的操作中调用我的业务逻辑层,如:

SomeManager.Update(formCollection);

但是我感觉有点厌倦了将formcollection传递给我的业务逻辑层。

我真的有选择吗?还有其他想法吗?

还是完全没问题?

4 个答案:

答案 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)