gpt4 book ai didi

svn - 如何管理跨多个站点共享的 CFC(子系统)?

转载 作者:行者123 更新时间:2023-12-04 20:21:51 25 4
gpt4 key购买 nike

你怎么能管理这样的事情?我尽我最大的努力将子系统设计为可重用,但只有某些特定于站点的东西必须自定义(例如 Account 实体中的字段,或 orm 注释中的 cfc="")。

我曾想过使用 SVN 并将定制分支出来,但我们发现它非常麻烦,因为提交人员每次都必须决定属于卡车或分支的增强/错误修复,一旦错过了什么,就不容易撤消。

那么......处理这种情况的最佳方法是什么?只需将一组代码克隆到一个新的源代码控制中,并修复两个/所有源代码控制上的错误?

最佳答案

假设你没有使用某种 MVC 框架......但是......

我使用了几种不同的方法来处理这些情况。

根据 CFC 之间的差异和相同点,您可以:

1)使用继承

如果您的绝大多数代码是相同的,但每个项目只有一些差异,那么将通用代码重构为您为每个项目扩展的基本 CFC。这允许您为大多数功能维护一组测试,然后只需为每个项目的偏离代码添加进一步的测试。

这样做的缺点是在修改基类时需要一些计划和纪律来保持前向兼容性。从本质上讲,您是在定义一个 API,而做好这件事并不是一件容易的事。

2)使用混音

如果您似乎每次都在重复功能/逻辑,那么请尝试将该逻辑重构为您将其包含到任何需要它的 cfc 中的代码块。见 Ben's experiments with mixinsSean's comments on mixins .

遗憾的是,与 Ruby 的模块不同,CF 中实现这一点的机制很弱。

如果您的需求如您在评论中描述的那样,“类似,逻辑/业务规则是相同的,但收集的输入和数据不一样”,我建议您查看 Rails 或 Django 以获得灵感。

在我的情况下,我最终开发了一个框架,该框架允许我在定义模型时扩展基本模型类,并简单地用一堆 cfproperty 标记填充它,这些标记具有定义我的模型并由基本模型使用的自定义属性类和一组处理大部分业务逻辑的服务。这适用于 95% 的情况,并且在我需要偏离框架逻辑的任何情况下,我都会在我的模型 cfc 中添加额外的函数,甚至覆盖基本模型的函数。

我的模型最终看起来像:

    <cfcomponent output="false" persistentLayer="GAE" persistentClass="asana" extends="com.bespokelogic.framework.BaseModel">
<cfproperty name="id" type="string" persistentDatatype="string" settable="true" gettable="true" required="true">
<cfproperty name="deckSet" type="string" persistentDatatype="string" settable="true" gettable="true" default="basic">
<cfproperty name="englishName" type="string" persistentDatatype="string" settable="true" gettable="true">
<cfproperty name="traditionalName" type="string" persistentDatatype="string" settable="true" gettable="true">
<cfproperty name="pronunciation" type="string" persistentDatatype="string" settable="true" gettable="true">
<cfproperty name="pronunciationNotes" type="string" persistentDatatype="string" settable="true" gettable="true">
<cfproperty name="description" type="string" persistentDatatype="string" settable="true" gettable="true">
<cfproperty name="type" type="string" persistentDatatype="string" settable="true" gettable="true">
<cfproperty name="anatomicalFocus" type="array" persistentDatatype="array" settable="true" gettable="true" default="#arrayNew(1)#">
<cfproperty name="therapeuticFocus" type="array" persistentDatatype="array" settable="true" gettable="true" default="#arrayNew(1)#">
<cfproperty name="benefits" type="string" persistentDatatype="string" settable="true" gettable="true">
<cfproperty name="variations" type="string" persistentDatatype="string" settable="true" gettable="true">
<cfproperty name="contraindications" type="array" persistentDatatype="array" settable="true" gettable="true" default="#arrayNew(1)#">
<cfproperty name="skill" type="string" persistentDatatype="string" settable="true" gettable="true">
<cfproperty name="instructions" type="string" persistentDatatype="string" settable="true" gettable="true">
<cfproperty name="skill" type="string" persistentDatatype="string" settable="true" gettable="true">
<cfproperty name="prelimAsana" type="asana" persistentDatatype="Key[]" settable="true" gettable="true" default="#arrayNew(1)#">
<cfproperty name="followupAsana" type="asana" persistentDatatype="Key[]" settable="true" gettable="true" default="#arrayNew(1)#">
<cfproperty name="thumbnailImage" type="string" persistentDatatype="string" settable="true" gettable="true">
<cfproperty name="primaryImage" type="string" persistentDatatype="string" settable="true" gettable="true">
<cfproperty name="images" type="array" persistentDatatype="array" settable="true" gettable="true" default="#arrayNew(1)#">
<cfproperty name="primaryVideo" type="string" persistentDatatype="string" settable="true" gettable="true">
<cfproperty name="videos" type="array" persistentDatatype="array" settable="true" gettable="true" default="#arrayNew(1)#">
</cfcomponent>

关于svn - 如何管理跨多个站点共享的 CFC(子系统)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5671497/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com