3

ドメイン モデルを設計するときは、問題のドメインを表すものに固執する必要があり、ドメイン モデルには監査情報を含めないでください。

したがって、私が猫をデザインしているとしたら、次のようになります。

public Cat {
    private Color furColor;
    private Color eyeColor;
    private boolean isDeclawed;
    etc...
} 

「updateDate」や「​​createTime」などの属性は絶対に持つべきではありませんよね?

ここで、Web アプリケーションが画面に猫のテーブルを表示する場合は、次のようになります。

名前の目の色の爪?最終更新
------ ---------- ------ ------------
フラッフィーグリーン No 2012/10/31
等...

では、ドメイン モデルで最終更新時刻を保持しない場合、そのデータをどのように (適切に) ページに取得するのでしょうか?

もちろん、ドメイン モデルの設計が不十分である可能性もありますが、それを改善したいと考えています。

ドメイン モデルを元の状態に保つことができるように、ジェネリックを受け入れるオブジェクトを作成することを検討していました。すなわち

public PersistableObject<T,K> {

    private T domainObject;
    private Date updateDate;
    private User updateUser;

    getters, setters, etc...
}

ただし、これでいくつかの問題が発生するのではないかと心配しています。

「ドメイン モデル」や「更新日」などについていろいろ検索しましたが、適切な用語を見逃していると思います。

誰かが私を正しい方向に向けることができますか?

4

2 に答える 2

1

私は最善を尽くします。オブジェクトとレコードを混在させている可能性があると思います。最終更新日は猫が更新された日ではなく、記録が更新された日です。OO では、そのオブジェクトに関するすべてを 1 つのオブジェクトにカプセル化できると考えるのが自然です。しかし、オブジェクトはそれ自体ではコンテキストを表現しません。猫の中にも色の種類がありますが、rgb または cmyk の値に到達する方法がなければ、それ自体は何もありません。

オブジェクト指向の初日にインストラクターが示した最初のサンプルの 1 つは、猫は動物であり、動物は生命体であるなどです。ほとんどの場合、ドメインオブジェクトで最後に変更されなかったり、最後に更新されなかったりする理由はありません。しかし、オブジェクトが他のオブジェクトとどのように相互作用するか、また定義が多すぎる場合にオブジェクトがどのように制限されるかを分離してモデル化できる場合 (はい、多くのことについてすでに決心しているため、制限付きと言いました)。オブジェクトの再利用について考えすぎることを提案しようとしているわけではありませんが、10 フィートまたは 10000 フィートのビューでコンテキストと意味を提供できるモデルでは、適切な関係を維持することが非常に重要です。

私はプラットフォームの研究開発に 9 年近く携わり、プラットフォームのモデリングと開発に何年も費やしました。私たちを常に悩ませていたのは、ia-a と has-a の関係が 1 つまたは 2 つ逆になっていることでした。その時点で 200 列のフラットなテーブルがあれば、モデルは役に立たなくなりますが、大規模なモデルや小規模なモデルでさえ、いくつかのリレーションをリファクタリングすることは大きな後退です。オブジェクトはレコードではなく、データに意味を与えるクラスでもありません。

要するに、MyBizObject は MyBizRecord をどのように拡張しますが、すべての本で推奨されていますが、MyBizProduct ... 拡張 MyBizMaterial Array MyBizRecord[] changeHistory; .... は非常に強力で、いつの日か MyBizOrders[] を履歴として追加する必要がある場合でも、モデル全体と工場を再加工する必要はありません。あなたが期待していたものとは違うと思いますが、あなたが探していた答えに車輪が回ることを願っています.

于 2012-07-20T15:36:59.893 に答える