5

Q : `モデル クラスにメソッドとコンストラクタを含めることはできますか?" [ベスト プラクティス]

従業員の名前、年齢、給与などで構成される従業員モデルクラスがあります...

public class Employee
{
    public string Name { get; set; }
    public int Age { get; set; }
    public int Salary { get; set; }
}

したがって、上記Model Classにはいくつかの自己更新メソッド[タイマーなどを使用して1時間ごとに従業員の年齢を更新するなど]および\またはコンストラクターを含めることができますか、それとも実行者からすべてを処理する方がよいですか?

4

4 に答える 4

5

なぜできなかったのですか?本当の答えは、ユースケースによって異なります。モデル クラスなどのパターンは、推奨事項であり、物事を行うための一般的な方法であり、破ることのできないドグマではありません。

注: 「タイマーなどで従業員の年齢を 1 時間ごとに更新する」という例は根本的に間違っています。スナップショップをある瞬間に保存する場合を除き、保存期間は根本的に間違っています。はるかに優れた解決策は、生年月日を保存し、年齢を計算することです。たとえばAge、getter のみでプロパティを定義します。

于 2013-11-04T23:19:43.647 に答える
4

モデルには、モデルに関連するすべてのロジック (これは DSL) が含まれている必要があるため、1 時間ごとに更新できます。自動プロパティを定義するときは、セッターとゲッターを定義するのと同じなので、もちろんメソッドとコンストラクターも追加できます。

于 2013-11-04T23:20:05.193 に答える
1

ここに私の 2 セントを入れさせてください。

私はこれから始めます:それは危険な場合があります

モデルに単純な CRUD のようなメソッドを追加しても問題はありませんが、モデルとビジネス ロジックの間の分離層が薄くなります。

これらのメソッドが時間の経過とともに「強化」され、ある時点でモデルの目的に合わないロジックになってしまうのを何度も目撃してきました。結果: 「モデル」と「コントローラー」の間の強い依存関係。

間違っているわけではありませんが、悪用できる「ポータル」が開かれます。

より厳密なアーキテクチャが必要な場合は、「マネージャーのような」クラスに操作を追加することを検討できます。

    Car {
       string type;
       int price;
    }

    CarManager {
       public CarManager(Car car) {...}

       public ChangePrice(...) {...}
       public ChangeType(...) {...}
    }

...マネージャークラスは、アーキテクチャに違反することを心配することなく、検証、例外処理、ロギングなどを適用できるようになりました.

結論:

  • はい、モデルに単純な CRUD 操作を追加できます。
  • 懸念事項:使用法に注意してください。

編集:

「タイマーか何かで1時間ごとに従業員の年齢を更新する」という依頼があるのを見逃しました。

私の本では、これはノーノーです:)。モデルの目的は、データ ストレージのみに限定する必要があります。情報を定期的に更新することは、純粋なビジネス ロジック操作です。

于 2020-05-10T07:19:44.010 に答える
0

それはすべて、クラスがどのように使用されているかに依存します。

それを許さない言語はありません。ただし、使用しているフレームワークと、コード内でクラスをどのように使用しているかによって、さまざまな機能を配置する場所が異なります。

すべての状況に最適な答えはありません。

于 2013-11-04T23:19:25.353 に答える