MVVMアーキテクチャでは、具体的にはモデルレイヤーです。 Collection<BasicModelType>
が継承/実装するオブジェクトでいっぱいに使用されている場合BasicModelType
; 「モデル」自体にビジネスロジックの一部を実装することなく、コレクション内の「モデル」上のビジネスロジックをどのように処理するのでしょうか? (OOPの貧弱な実践であるため、「as」と「is」の使用は許可されていないと仮定します)。モデル(親)に多態性モデル(子)のコレクションが含まれている場合のビジネスロジック
は---上記全く明確でない場合は、以下にさらに説明.---
「モデル」だけのプロパティを持つ基本的なクラスを意味します。
ViewModelは、XMLServiceを介してモデルを取得します。
XMLServiceは、XMLドキュメント内のモデルからモデルを作成する方法を知っている単なるクラスです。 (モデルの作成方法を教えてください)
OutputServiceは、モデルを使用して、モデルの内容に基づいてソフトウェアから出力を作成する方法を知っているクラスです。それはまた、モデルだけで必要なもの以外のロジックも持っています。
モデルには他のChildrenModelsのコレクションが含まれています。 ChildrenModelはBaseModelから来ている点で多型です。 BaseModelを持つことは、連続したコレクションとしてユーザーに格納して提示できるため、望ましいことです。以下の例は、私が考えることができる最も単純な例であるので、お詫び申し上げます。 OutputServiceで定義された
Truck : Vehicle
Name
HasTrailer
Car : Vehicle
Name
HasSpoiler
LogicはChildModelが与えられたモデルのコレクションにトラックや車である場合に応じて異なることを行う必要があります。問題はもちろん、ChildCollectionは基底クラスタイプVehicle
です。実際の型がわかっている唯一の時間は、ChildModelオブジェクトのインスタンス化中です(XMLの型が固有であるために認識されます)。
OutputServiceがどのようにその機能をChildModelコレクションに適用するかを処理する共通のパターンがありますか?定義上、各モデルタイプを知る必要があります。
switch文で型をチェックするのは間違っているようです。
もちろん、実際のChildModelに "OutputService"のロジックを含めることが解決策です。そのロジックを実行した関数をBaseClassまたはInterfaceに公開するだけです。次に、任意のオブジェクト/サービス/仮想モデルが、モデル固有の結果を得る前記関数を呼び出すリストを反復するだけでよい。しかし、これは基本的にビジネスロジックを分割していませんか? 「懸念」はどこにでも振りかざされていませんか?
ありがとうございます。あなたが言っていることは、私の「モデル」の理解があまりに単純化されているということですか? POCOオブジェクトとサービスだけが存在することを期待しています。現実には私はPOCOオブジェクトを持っているかもしれません。それはサービスなどによってインスタンス化されるビジネスオブジェクトによってさらにラップされますか?私は私の頭の中でこのアイデアを試していた。私がモデルのコンセプトを荒らしていたかどうかはわかりませんでした。 – Ender
@はいモデルをあまりにも単純化しています。 –