简单优雅的模式,分离数据访问,业务逻辑和演示

时间:2009-04-06 21:55:17

标签: c#-2.0 data-access-layer business-logic-layer presentation-layer

我需要一个简单的模式来完成上述操作。 几点注意事项:

1)我有一个我不得不使用的类,它会检索实际的数据并返回DataTable

2)我不关心支持所有可能的数据库类型的通用接口,我们坚持使用一种数据库类型。

3)如何优雅地捕获错误并通知用户发生错误。

4)不要让我学习MVC - 现在不是一个选择。

我对实际的图案设计很感兴趣。

3 个答案:

答案 0 :(得分:1)

您希望使用MVC模式将业务逻辑与演示文稿分开(请注意,我 NOT 正在讨论ASP.NET MVC Framework)和DAO模式将业务逻辑与数据访问分开。

返回DataTable的类将成为模型的一部分。您编写一个图层(每个域对象的DAO),它将您的DataTable转换为各种域对象。您的UI不应包含任何不仅仅是向用户呈现输出的逻辑;任何用于从模型中检索数据的实际逻辑都在控制器层中处理,该控制器层从模型中获取用户请求的数据,并将其发送到适当的视图以将其呈现给用户。

应在层边界处理异常;捕获并执行某些操作(可能只是记录它并将用户发送到错误页面),或者根据需要包装更高级别的异常。

答案 1 :(得分:0)

  

不要让我学习MVC - 现在不是一个选择。

您可以在不使用ASP MVC框架的情况下执行简单的MVC或MVP模式。介绍非常简单。这是一个非常简单的示例MVP Example

答案 2 :(得分:0)

有许多模式接近您描述的内容。我建议获得Martin Fowler的优秀书籍企业架构模式的副本,特别是第14章。 Web演示模式。您会发现任何认真尝试将演示文稿,域名分开(业务逻辑),数据源将引导您进入同一主题的众多变体之一。

MVC,MVP,可视化代理等都分为三层,不同的是每层的职责以及各层如何相互沟通。

例如,被动视图模式基本上剥离了与演示文稿无直接关系的任何内容的UI层。典型示例是您希望在特定条件为真时突出显示的字段。在被动视图中,表单只包含用于确定是否应突出显示该字段的逻辑。触发此状态的业务规则将位于演示者/控制器层,而不直接依赖于实际视图。

就数据源层而言,主要的好处是无法随时切换数据库。主要好处是对数据库模式的更改仅影响数据源层,而不会扩展到应用程序的其余部分。如果你坚持使用数据集,那么一个好的方法就是表数据网关模式。