2009-08-12 13 views
0

私は教師、学生などの役割を持つことができるアプリケーションに取り組んでいます。機能のいくつかは似ているので、私は基本クラスUserも持っています。ユーザーにはAddRoleメソッドなどが含まれます。ドメイン設計の質問

教師オブジェクトが作成されると、「教師」ロールがオブジェクトに自動的に割り当てられます。私はコンストラクタ内でこれをやっていますが、私はそれが醜いと思います。コードは次のとおりです。

public class Teacher : User 
    { 
     public Teacher() 
     { 
      AddRole(new Role() { RoleName = "Teacher"}); 
     } 
    } 

データベースには教師用のテーブルがありません。すべてがユーザーベースです。教師は単なる役割であり、学生とは異なる機能を持っています。

どうすればいいですか?

答えて

2

実装は、あなたの役割がどのように使用されるかによって大きく異なります。彼らはそれらに関連する機能を持っていますか?それとも彼らはラベルですか?あなたの役割は固定ですか、動的ですか?それらがどのように使用され、定義されているかによって、あなたの役割に合わせてインタフェースや継承が機能するかもしれません。実際のオブジェクトはもっと良いかもしれません。

+0

私はこのアプローチが好きです。ユーザーコンストラクタに文字列またはRoleType列挙型を送信する必要があるかどうかは不思議です。ありがとう! – azamsharp

+0

私はいくつかの種類の列挙型に行きます。そのため、マジック文字列は避けられ、比較演算子の機能は明確で定義されています。 – Tom

+0

文字列または列挙型を使用する代わりに、型自体を使用するのはどうですか?例えば。 public Teacher():ユーザー(typeof(TeacherRole))。これにより、型/列挙型を同期させておく必要がなくなります。 デコレータ+ファクトリ/ビルダーのパターンを使用することもできますが、非常に複雑なものになる可能性があります。 –

0

ドメインモデルではど​​のように動作しますか?あなたのドメインモデルのために働くものは、あなたのコードに含まれていなければなりません。それが-M 1-またはUserテーブルとM・ツー・メートルの関係を持っているRoleテーブルを持つことが、実際には非常に一般的ですいかが

//C++ look alike pseudocode 
    public class User{ 
     String role; 

     User (role_){role = role_;} 

     String getRole(){return role;} 

    } 


    public class Teacher : User 
     { 
      public Teacher():User("Teacher") 
      { 

      } 
     } 
0

+0

これは私が不思議に思っていたものです。 – Eric

+0

実際に私はロールリストを保存するIList を持っています! – azamsharp

+0

ええと、そのAddRole()は複数の役割を意味します。エリックが意味することは、一般的に静かなことですが、ロールにはリストも含まれているということです。 – aberrant80

関連する問題