0

JSON で公開する必要があるプロパティのみを含むモデルと部分モデルがあります。

しかし、モデルと彼の部分モデルの間のプロパティは冗長です。

どうすればそれを回避したり、アプローチを改善したりできますか?

namespace Dashboard.Models.UserModels
{
    public class UserModel
    {
        public int id { get; set; }
        public string dbName { get; set; }
        public string firstname { get; set; }
        public string lastname { get; set; }
        public int idExternal { get; set; }
        public int idInstance { get; set; }
        public string login { get; set; }
        public string password { get; set; }
        public DateTime? dtContractStart { get; set; }
        public DateTime? dtContractEnd { get; set; }
        public string emailPro { get; set; }
        public string emailPerso { get; set; }

        public LuccaUserModel()
        {
            idInstance = -1;
        }

        // partial model for json result
        // not sure is the best way or have to be here
        public class PartialUserModel
        {
            public int id { get; set; }
            public string firstname { get; set; }
            public string lastname { get; set; }
            public string emailPro { get; set; }
            public string emailPerso { get; set; }
            public DateTime? dtContractStart { get; set; }
            public DateTime? dtContractEnd { get; set; }
            public string url { get; set; }
        }

        // UserModel Methods
    }
}
4

2 に答える 2

1

適切な設計を行うことと、やり過ぎの設計を構築することは紙一重です。答えは多くのインプットに依存しますが、その中で私はプロジェクトとモデルの幅を最も重視することにしました。

私の答えをより明確にするために、私は異なる用語を使用していると言わざるを得ません。UI で使用するために採用されるデータは、通常 ViewModel と呼ばれます。あなたの場合、UserViewModel必要な情報のサブセットを含むものを構築します。

1 回限りのプロジェクトに取り組んでいる場合は、モデルを ViewModel として再利用します。これを行うには、機密情報を削除し、データベースから遅延ロードされるデータをロードまたはカットオフし、データに対して他の準備を行うヘルパー メソッドを用意します。これはすべて同じモデル クラスで行われます。

短期間のプロジェクトでない場合は、モデル データからマップする別の ViewModel クラスを作成することを検討します。次に、ほとんどフラットなデータを扱っている場合は、独自のマッパーを作成する代わりに、 AutoMapper ツールを使用してデータを自動的にコピーします。

ここで別の回答が述べているように、UI で必要なデータを含む基本クラスを作成し、それを他のモデル データで拡張しますが、これはいくつかの理由から適切なアプローチではありません。

  1. 関心の分離に違反する場合。モデルと永続性を扱うプロジェクトは、ViewModel について認識してはなりません
  2. 関連オブジェクトのデータを ViewModel オブジェクトにフラット化する必要がある場合があります。その場合、モデル オブジェクトには存在しないフィールドや冗長なフィールドが含まれます。
  3. ViewModel で計算されたフィールドとヘルパー メソッドが必要になる場合があります。これは再びモデルになり、設計について更新されていないすべての人を混乱させます。
  4. 同じViewModelクラスにいくつかの無関係なモデルクラスを採用したい場合があります

簡単に言うと、モデル クラスを再利用するか、ViewModel を作成します。残念ながら、賢明な解決策はありません。見つけた場合は、コメントを投稿してください:)

于 2012-11-29T17:00:50.447 に答える
1

PartialUserModel の UserModelBase クラスの名前を変更し (またはそのままにしておきます...そうすることでより論理的に理にかなっています)、UserModel を継承させることができます。

public class UserModel : UserModelBase
{
    ...
}

もちろん、この場合、UserModel からすべての重複するプロパティを削除する必要があります。

于 2012-11-29T16:55:39.307 に答える