2009-07-10 39 views
0

我是编程新手(现在6周)。我现在正在阅读很多书籍,网站和博客,并且每天都会学到新的东西。豆类,方法,访问和更改?推荐的处理方法是什么(即在ColdFusion中)?

现在我正在使用coldfusion(job)。我已经阅读了许多网页上的oop和cf相关文章,并且我打算在下一步进入mxunit,然后看看一些框架。

一件事困扰着我,我无法找到一个满意的答案。豆有时被描述为DataTransferObjects,它们持有来自一个或多个来源的数据。

处理这些数据的建议做法是什么?

我应该使用一个单独的对象来读取数据,对它进行变异并将其写回到bean中,以便该bean只是一个数据存储(可通过getter访问),还是应该实现方法来操作数据在bean中。

我看到两个选项。
1.该bean只是存储,其他对象必须对其数据做些什么。
2.该bean是存储和逻辑,其他对象告诉它对数据做些什么。

第二个选择似乎对我更加遵循封装,而第一似乎是豆的使用方式。

我相信这两个选项满足某人的需要,并在特定的语境中建议,但什么是一般的建议,尤其是当有人不知道有足够的了解的更大的应用程序的图片,是一个初学者?

例如:
我已经创建了一个bean,它包含一个来自数据库的Item,其中包含项目ID,名称和1d数组。每个数组元素都是一个结构,用于保存用户的id,其名称和项目数量。通过一个getter我在表格中输出数据,我也可以改变每个用户的数量或者检查用户从这个项目中删除。

我在哪里放来处理应用程序的用户输入的逻辑是什么?
我是否告诉bean根据用户输入更改其数组?
或者我创建一个对象来改变数组并将新数组写入bean中? (所有的数据库访问(CreateReadUpdateDelete)都是通过一个DataAccessObject来处理的,该DataAccessObject获取bean作为参数,DAO还包含一个从数据库读取多条记录的网关方法,我使用这个方法得到一个表项目,我可以点击创建bean和它的数据。)

回答

1

您看到的是一些被称为"anemic domain model"。是的,这很常见,不,这不是很好的OO设计。一般来说,逻辑应该与它所操作的数据一致。

然而,也有不少世界separation of concerns事 - 你不想要的一切东西进入的领域模型。例如,数据库访问通常被认为是一个技术上独立的层,而不是域模型本身应该做的事 - 看起来你已经有了这种分离。究竟应该和不应该成为领域模型的一部分取决于具体案例 - 好的设计不能真正用绝对规则表达。

另一个问题是通过网络传送的模型,例如,应用服务器和Web前端之间。您希望这些仅包含数据本身,以减少badnwidth使用和延迟。但这并不意味着它们不能包含逻辑,因为方法不是序列化对象的一部分。派生字段和缓存是 - 但它们通常可以以某种方式标记为暂时的,以便它们不被传输。

1

你的bean应该包含你的数据和逻辑。

数据传输对象用于通过网络传输对象,例如从ColdFusion到浏览器中的Flex应用程序。 DTO仅包含对象数据的相关字段。

在可能的情况下,您应尽量减少将bean的内部实现(例如用户结构数组)暴露给其他对象。要更改数组,您应该直接在bean上调用mutator函数,例如yourBean.addUser(user),它将用户结构附加到内部数组。

不需要为组合的网关对象创建单独的DAO以便进行数据访问。只需将所有数据库访问方法(CRUD和表查询)放入单个网关对象即可。

+0

我没有一个网关对象,只是一个额外的方法在我的dao内(在我看来)接管了网关对象的一部分(在我的情况下查询数据库以获取我想要的所有记录能够进一步工作) – mrt181 2009-07-11 21:48:58

相关问题