2010-12-17 7 views
2

VS2K8、C#。 - POCOドメインオブジェクトとデータインタフェースアーキテクチャの質問:サービス

データ - リポジトリパターン

コア:私は現在、次のプロジェクトとソリューションを持っています。コアで定義されたインタフェースを実装します。 Fluent NHibernateのマッピングクラスもあります。

インフラストラクチャ - NHibernateはを設定し、依存性注入のために使用される、など

テスト - テスト[コア、データのテストなど]

ウェブ - MVC2 Webプロジェクト今

、それと私は、メーリングリストへの参加、連絡先の提出などを追加するための最善の行動を決定しようとしています。

私はこれらがウェブにあるべきではないと思います。私はメーリングリストの情報と連絡先情報を保存するときに保存するのではなく、データに配置する必要はないと思います。

コアレベルに配置する必要があります。それがCoreに置かれていれば、データベースに保存することに依存するでしょう。私はこれを配置する場所とそれをどのように構築するのか、少し難解です。あなたは何を取るのか?

これは、JoinMailingList(emailAddress)というメソッドを使用してMailingListというコアレベルのインターフェイスを作成し、そのインターフェイスをDataに実装するだけの簡単な方法ですか?これはビジネス上の関心事なので、ベストルートのようには聞こえません。思考?

+1

アーキテクチャの質問はprogrammers.stackexchange.com http://blog.stackoverflow.com/2010/12/introducing-programmers-stackexchange-com/に属します....混乱を始めましょう!!!!私たちは他のサイトを最初に必要としませんでした。 – Shoban

+0

ここでそれに取り組もうとしています。結局それはプログラミング関連の質問です。 – Pradeep

+1

私はこれをstackoverflow.comに置くことは安全だと思います。これはプログラミングに関連する質問です。ここでコードを見ていきます。それは確かにそれにいくつかのより高いレベルの建築的な質問を持っていますが、異様なものはありません。 – StephenPAdams

答えて

3

サービスライブラリを追加し、コアライブラリにサービスインターフェイスを追加します。

public interface IMailingListService 
{ 
    void Subscribe(string email); 
    void Unsubscribe(string email); 
} 

public interface IMailingListRepository 
{ 
    MailingList LoadMailingList(); 
    void SaveMailingList(MailingList list); 
} 

public class MailingListService: IMailingListService 
{ 
    private IMailingListRepository _repository; 

    public MailingList(IMailingListRepository repository) 
    { 
    _repository = repository; 
    } 

    public void Subscribe(string email) 
    { 
    var list = _repository.LoadMailingList(); 
    list.Subscribe(email); 
    _repository.SaveMailingList(list); 
    } 
} 
+0

クイック返信をありがとう。あなたはこのルートに行く:1.メーリングリストサービス(IMailingListService)のインターフェイスでサービスプロジェクト/ライブラリを作成します。 2.コアにメーリングリストリポジトリインタフェースを作成します。コアにメーリングリストサービスを実装する。 4. Dataにメーリングリストリポジトリを実装する(例としてNHibernate経由)。はい? – StephenPAdams

+0

また、コアライブラリは参照する必要がありますが、データライブラリは参照しないでください。あなたのDIコンテナはあなたのウェブサイトに接続されていなければなりません。コンテナがあなたのための依存関係を処理できるように、データライブラリとサービスライブラリの両方を参照する必要があります。 – NerdFury

+0

が閉じると、サービス実装はサービスライブラリにあります。インタフェース(IMailingListService)は、リポジトリ契約とともにコアになります。私は自分のコアライブラリのDataContractsとServiceContractsに、それぞれのインタフェースを行くために2つのフォルダを作成する傾向があります。 – NerdFury

関連する問題