2

Matt Gifford の著書「ColdFusion でのオブジェクト指向プログラミング」を読んで、ColdFusion OOP に関する確かな知識を掘り下げようとしています。私の ColdFusion の知識は少し遅れています。ColdFusion 8 に適用される CFML には精通していますが、9 と 10 の新機能についてはあまりいじっていません (それらは私の To-Do にありますが、時間がかかることが予想され、回答が必要です。この時点で)。私の会社は最近、サーバーを 10 に更新しました。新しい機能を活用する予定です。

私の質問は、この本で説明されていたことに基づいており、Google で検索すると、混乱し矛盾する回答に導かれます。CF8 での ORM 開発についての私の理解 (Transfer のような ORM フレームワークや書籍の例やその他の読み物を使用) では、Bean の属性を variables.instance スコープに配置して、オブジェクト属性をアプリケーション属性から隔離します。変数のスコープ。ただし、CF9 に組み込みの ORM を使用すると、インスタンス スコープは使用されません。代わりに、オブジェクトとアプリケーションの属性を一緒に変数スコープに配置します。私にとって、これは私の開発方法論のスローです。私は多くのオブジェクトで一度にすべてのオブジェクト属性を返す関数を作成する傾向があるためです(オブジェクトの初期化に便利です。

なぜこれがこのように行われたのかについて説明が必要です。私には意味がありません。ベイクイン ORM 内に存在する、不足している、またはまだ実行していないすべての属性機能を複製する他の関数はありますか? この属性の命名プロセスと、var スコープによって解決されない関数で作成する可能性のある他の変数との間に潜在的な競合があることを読みました。それが 10 で解決されたのか、それともナンセンスなのかはわかりません。明確化は役に立ちます。

4

2 に答える 2

2

いわゆる「インスタンス」スコープは、CFコミュニティによって構成されたものであり、Adobeによって採用されなかったため、AdobeのORMの実装には含まれていません。この回答では説明しませんが、長所と短所がありますが、あなたと同じように、私も気に入っています。

getMemento()「インスタンス」スコープなしでmementoパターンを実装するには、すべてのプロパティの構造体を返す独自の関数を作成する必要があります。

function getMemento()
{
  var instance = {};

  instance.propertyA = variables.propertyA;
  instance.propertyB = variabels.propertyB;

  return instance;    // note: safer to return a Duplicate() of instance
}

または、を使用して一般的なものを記述しGetMetaData()ます。以下を参照してください。

于 2012-09-26T18:44:04.333 に答える
1

あなたの質問は、「なぜこれがこのように行われたのかについての説明が必要です」に要約されます。OK、それは当然のことです。あなたが挙げたまさにその理由でこれを構成可能にすれば、CFはより柔軟になると思います。

しかし、「なぜこれがこのように行われたのかについての説明が必要です」という回答が得られた場合、そこから何をするつもりですか? その情報を知っていても、特に役に立ちません。

その答えは、私が知る限り、「Adobe CF チームはできる限り熟考していませんでした。その結果、現在の状況に到達しました」です。そこには。率直ですが、本当です。CF チームは実際には CF 開発者ではない (彼らは Java 開発者である) ことを覚えておく必要があります。したがって、彼らは CF の使用に慣れているわけではありません。開発者は、「実際には、これらを変数のスコープにそのまま入れるのは良い考えではない」と考えるようになるでしょう。私はこれについて個々の開発者を責めているわけではありません (Java を知っている CF の専門家が大勢いるよりも、優れた Java 開発者がいるほうがよいです)。健全性を確認するには、このようなものをチェックしてください。

ここでのアクション ポイントは、CF11 でこれを処理するためにアドビにチケットを発行することだと思います。あなたがそれを提起した場合、私はそれに投票します(これについてあなたとまったく同じ経験をしたからです). バグベースはこちらです。

その間、何ができますか?CF が作成する生成されたアクセサーを使用する必要はありません。独自のアクセサーを作成して、好きな場所にプロパティ値を貼り付けることができます。onMissingMethod() を活用し、getPROPERTYNAME() と setPROPERTYNAME() へのメソッド呼び出しを探して、それらをジェネリック getter/setter に渡すことで、プロパティごとに個別のアクセサーを作成する必要がなくなります。またはそのようなもの。

于 2012-09-26T19:53:40.677 に答える