从项目中的某些层隐藏方法

时间:2013-09-06 19:17:32

标签: asp.net

我正在查看一个旧项目,并希望看看是否有人建议如何隐藏某些方法不被各个层调用。这是一个3层项目,webapplication - >网络服务 - >数据库

在应用程序中,有一个User对象。更新用户时,Web应用程序将创建一个User对象并将其传递给Web服务。 Web服务将使用DataAccessLayer将User对象保存到数据库。看了之后我想知道是否应该在User类中创建一个Save方法。这样服务并简单地调用Save on the User对象,这将触发db更新。

但是这样做会暴露从Web应用程序调用Save,对吗?由于webapplication也可以访问相同的User对象。

有没有相关的,或者最好完全避免这种情况?

1 个答案:

答案 0 :(得分:1)

通过将User对象保持为仅保存其中没有逻辑的数据的对象,存在一种关注点分离。你最好将它分开,原因如下:

  1. 如你所说,这是一个不好的做法,因为Save'功能将暴露给与它们无关的其他地方/类别(这对于编程来说非常重要)。

  2. 修改服务层 - 我猜您正在使用WCF Web服务,因为您可以通过SOAP将.NET对象(c#/ VB)传输到服务。如果您将保存逻辑放在“用户”对象中,则无法将其替换为另一个接收简单文本数据结构的Web服务,例如JSONXML,或者根本不支持.NET对象。

  3. 修改数据存储层 - 例如,如果您希望将数据存储在与其他数据库(如MongoDB,RavenDB,Redis或其他任何数据库)不同的地方,则必须重新实现每个类负责更新数据。这也与单元测试和模拟相关,使得查询更加复杂。