1

我们在域模型中使用接口来表示实体类。通过使用 LinqToSql,我们有这些的具体实现。我们为每个 LinqToSql 类添加了一个工厂方法,我们的服务层使用它来实例化一个新实体(注意;与控制器的 DataBind 属性相反)。

MonoRail 的默认 DataBinder 实现将忽略定义为接口的属性。

理想情况下,我们不想在 MonoRail 中实例化我们的数据层类——接口的全部意义在于分离这些关注点。

此外,我们真的不想创建另一组非 LinqToSql 具体类,其唯一工作是在层之间进行转换。

在这里结束了漫长的一天;请有人怜悯并指出我们应该用自己的实现重载的 IDataBinder 部分,或者暗示我们可能尝试的其他方法?;-)

4

2 回答 2

3

您应该查看 IParameterBinder。看看我写的关于这个主题的帖子

于 2009-02-06T19:41:57.867 回答
0

正如 Ken 指出的那样,您的想法可以使用自定义 IParameterBinder 来实现。

一个解决方案是使用 IOC:

  • 从其界面解析表单的具体实例
  • 然后使用 IDataBinder 将实例绑定到请求参数

另一种是使用 IDictionaryAdapter:

  • 为您的界面生成一个 dto 代理
  • 然后使用 IDataBinder 将 dto 代理实例绑定到请求参数

注意:如果接口,第二个选项将不起作用:

  • 不公开(哼)
  • 有方法
  • 或事件
  • 或只读属性
  • 或 setonly 属性

最后,我不确定在控制器签名中暴露具体类的问题是什么。

我自己在实现应用层服务中定义的接口的控制器中使用具体形式,它允许我在两边分离关注点:

  • 控制器端是表单/命令的 Http 映射和第一级数据验证
  • 应用层服务是表单/命令的业务验证和处理
于 2010-01-24T04:07:51.677 回答