【发布时间】:2011-01-13 09:43:08
【问题描述】:
我正在尝试构建一个对象来代表我正在从事的项目的大得可笑的形式。 http://www.flickr.com/photos/namtax/5351091239/
我不想将所有字段构建到一个大对象中,因为我认为这不是一种好方法,所以我将模型构造成这样 -
一个接触对象。
一个工作对象 - 一对一链接到联系人。
一个旅行对象 - 与联系人一对一关联。
一个地址对象 - 一对多链接到联系人。
一个紧急联系人对象 - 一对多地链接到联系人。
这是其中一种关系的示例代码 - 用 CF9 ORM 编写
property name="work"
fieldtype="one-to-one"
cfc="work"
mappedby="contact";
这里的问题是,由于您可以在表单中选择所有可能的选项,它会导致我的控制器中的 saveContact 函数很大并且代码很臭。这是代码的粗略翻译
VARIABLES.contact = contactService.getContact(form.iContactId);
contactService.set(contact:contact,argumentCollection:form);
contact = contactService.save(contact);
if(_emergencyContactService.userIsSubmittingAnEmergencyContact(form)){
VARIABLES.emergencyContact = _emergencyContactService.getEmergencyContact(contact);
emergencyContactService.setEmergencyContact(emergencyContact,form);
if(! contact.hasEmergencyContact()){
contact.setEmergencyContact(emergencyContact);
emergencyContact.addarrContacts(contact);
}
_emergencyContactService.save(emergencyContact);
}
// Repeat this logic to check if work object, travel object or address object have been selected in the form also, get and set accordingly.
然后我重复上面显示的紧急联系人的 if 语句,以检查工作对象、旅行对象或地址对象是否也已在表单中选择。如果是这样,获取并设置对象,然后在必要时链接联系人对象。
这对我来说似乎效率不高,尤其是当我还需要在另一个控制器方法上重复所有这些逻辑时。有没有更好的方法来构造我的对象,或者有更好的方法来处理我的控制器代码?
谢谢。
【问题讨论】:
-
你用的是什么框架?
-
啊,我们没有使用框架,但我正在组织应用程序以尽可能多地镜像 MVC。
-
我强烈推荐一个框架。它将帮助您更好地组织起来,并为服务对象、ORM 对象等提供适当的“家”。我推荐 FW/1 (github.com/seancorfield/fw1)。还有其他的,赶紧谷歌一下吧!
-
是的,这不是我的选择,但是该项目是在没有 MVC 的情况下启动的。我将 FW1 和 Coldbox 用于我的个人项目,它们的帮助很大。
标签: oop orm coldfusion