0

我正在浏览一个旧项目,想看看是否有人对如何隐藏某些方法不被各个层调用提出建议。这是一个 3 层项目,Web 应用程序 -> Web 服务 -> 数据库

例如,在应用程序中有一个用户对象。当一个用户被更新时,网络应用程序将创建一个用户对象并将其传递给网络服务。Web 服务将使用 DataAccessLayer 将用户对象保存到数据库中。看了这个之后,我想知道是否应该在 User 类中创建一个 Save 方法。这样,服务只需调用 User 对象上的 Save 即可触发数据库更新。

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

无论如何,这是否存在,还是完全避免这种情况更好?

4

1 回答 1

1

User通过将对象保持为仅包含没有逻辑的数据的对象,可以实现关注点分离。您最好将其分开,原因如下:

  1. 正如您所说,这是一种不好的做法,因为“保存”功能将暴露给与它们无关的其他地方/类(这对于一般编程很重要)。

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

  3. 修改数据存储层——例如,如果你想将数据存储在不同的地方,比如 MongoDB、RavenDB、Redis 或任何你想要的数据库,你将不得不重新实现负责更新数据的每个类. 这也与单元测试和模拟有关,使它们更难查询。

于 2013-09-06T20:36:00.153 回答