我怎样才能将此OOP作为ColdFusion组件(CFC)?

时间:2011-05-19 03:22:27

标签: oop coldfusion cfc

是否有人能够解释以下问题要求我做什么。我不需要知道代码,只是对Coldfusion的不同解释会很好,所以我可能能够理解他们要求我写的内容。

据我所知,ColdFusion没有“属性”,因此必须使用CFC进行模拟。

  1. 创建具有以下特征的类

    • 它应该有三个数据成员(一个整数,一个字符串和一个double)构造时,对象应分别使用以下值初始化其三个数据成员:10,“hello world”和1.234
    • 它应包含允许使用该类的使用者检索和修改任何数据成员值的属性。
    • 它应该有一个允许消费者在一次调用中设置所有3个值的方法。
  2. 创建一个方法,创建问题4中指定的类的新实例:(您不必编写任何代码来测试该过程)

    • 使用班级提供的属性 获取每个数据成员的值 并将值输出到调试 窗口使用虚构和 全球可用的方法 WriteToDebugWindow()。
      WriteToDebugWindow()接受一个字符串 输出值的参数 调试窗口。由于这种方法 因此是虚构的 无论用什么语言都足够了 你选择参加这个考试。
    • 使用班级提供的属性 将每个数据成员修改为值 你选择然后输出 您更改的属性的值 到调试窗口使用 WriteToDebugWindow()和以前一样。

2 个答案:

答案 0 :(得分:2)

这是家庭作业,但需要在沉闷的一天休息一下。

下面是使用<cfproperty/>隐式getter和setter的ColdFusion 9特定实现。 CFC会覆盖整数和双成员的setter,以执行数据类型验证ColdFusion本身不会执行。

<强> BrownPeanut.cfc

<!--- accessors="true" causes CF9 to set data in the "variables" scope --->
<cfcomponent output="false" accessors="true">
    <cfproperty name="MyDouble" type="numeric" />
    <cfproperty name="MyInteger" type="numeric" />
    <cfproperty name="MyString" type="string" />

    <cffunction name="init" output="false" access="public" returntype="BrownPeanut" hint="Constructor">
        <cfargument name="MyDouble" type="numeric" required="false" default="1.234"/>
        <cfargument name="MyInteger" type="numeric" required="false" default="10"/>
        <cfargument name="MyString" type="string" required="false" default="hello world"/>
        <cfset setMyDouble(arguments.myDouble)>
        <cfset setMyInteger(arguments.MyInteger)>
        <cfset setMyString(arguments.MyString)>
        <cfreturn this/>
    </cffunction>

    <cffunction name="setMyDouble" output="false" access="public" returntype="void"
        hint="Overrides default setter">
        <cfargument name="MyDouble" type="string" required="true"/>
        <!--- data type checking because ColdFusion does not natively make the distinction --->
        <cfset var jDouble = createObject("java", "java.lang.Double").init(arguments.myDouble)>
        <cfif jDouble.toString() NEQ arguments.myDouble>
            <cfthrow type="java.lang.IllegalArgumentException" message="Invalid double value '#arguments.MyDouble#'">
        </cfif>
        <cfset variables.MyDouble = arguments.MyDouble>
    </cffunction>

    <cffunction name="setMyInteger" output="false" access="public" returntype="void"
        hint="Overrides default setter">
        <cfargument name="MyInteger" type="string" required="true"/>
        <!--- data type checking because ColdFusion does not natively make the distinction --->
        <cfif NOT isValid("integer",arguments.MyInteger)>
            <cfthrow type="java.lang.IllegalArgumentException" message="Invalid integer value '#arguments.myInteger#'">
        </cfif>
        <cfset variables.myInteger = arguments.myInteger>
    </cffunction>
</cfcomponent>

<强> BrownPeanut.cfm

<cffunction name="WriteToDebugWindow" output="true" access="public" returntype="void" hint="">
    <cfargument name="data" type="string" required="true"/>
    <cfset var local = structNew()/>
    <!--- implementation goes here --->
    <cfoutput>#arguments.data#<br /></cfoutput>
</cffunction>

<cfset BrownPeanut = new BrownPeanut()>

<cfset writeToDebugWindow(BrownPeanut.getMyDouble())>
<cfset writeToDebugWindow(BrownPeanut.getMyInteger())>
<cfset writeToDebugWindow(BrownPeanut.getMyString())>

答案 1 :(得分:0)

因此,您需要一个将值初始化为 this 范围的init方法,然后返回 this 。返回类型应该像“path.to.yourCFC”。您将需要单独的getter和setter方法,以及一个将更新它们的方法。后一种方法应该只调用各个setter。