2009-07-23 18 views
8

私はWCFをセットアップするのが初めてです。私はプロジェクトに参加していますが、私のWCFプロジェクトには5つの異なるサービスがあり、私は正しいことをしているのでしょうか? 。今の私のサービスは、私のデータベーステーブルに1-1です。私は次のようなものになります:WCF 1つのサービスまたは複数のサービス

public class Projects : IProjects 
{ 
    public List<Project> GetAll() 
    { 
     return (from p in Connection.Data.Projects 
       select new Project {ID = p.id, Name = p.name}).ToList(); 
    } 

    public Project GetByID(int id) 
    { 
     return (from p in Connection.Data.Projects 
       where p.id == id 
       select new Project {ID = p.id, Name = p.name}).First(); 
    } 

    public Project AddProject(string name) 
    { 
     var project = new Data.Projects {name = name}; 
     Connection.Data.AddToProjects(project); 
     Connection.Data.SaveChanges(); 

     return new Project {ID = project.id, Name = project.name}; 
    } 

    public void DeleteProject(int id) 
    { 
     var project = (from p in Connection.Data.Projects 
         where p.id == id 
         select new Project {ID = p.id, Name = p.name}).First(); 

     Connection.Data.DeleteObject(project); 
     Connection.Data.SaveChanges(); 
    } 
} 

私のプロジェクトでは、それぞれのテーブルに似たクラスがあります。サブクラスとの1つのサービス接続を使用する方法や、テーブルごとに1つのサービスクラスとして保持する方法を見つけるべきでしょうか?

答えて

8

「それは依存します! :-)すべてのITとプログラミングの質問に対する標準的な答え:

私はこれらの5つの別々のサービスを持っていることに間違いはありません - あなたは本当に1つの大きなサービスにそれらをすべて一緒にマージすることで何も得られない、私は言うだろう。私はそれらを別々に保つことを好むだろうし、 "lean'n'mean"。

別々のサービスが5つある場合は、個別にサービスへのアクセス権などの管理も可能です(例:特定のユーザーグループが1つのサービスを使用するようにします。

もう一度:あなたはそれをうまくやっていると思います。私は、巨大なサービスを5つ持っていることから魅力的な理由や恩恵は見られません。

私が提案するかもしれない唯一の真の変化は、あなたのアプリケーションが望んでいるものともっと密接に一致するようにサービスを設計しようとしていることです。ハンドル)、データベースにあまりにも密接にモデリングします。データを保存する基礎となる店舗ではなく、「タスク指向」または操作面で考えるようにしてください。

マーク

+1

素晴らしい、ありがとう! –

+0

タスクベースのアプローチに同意します。サービスをリポジトリとして考えるのではなく、ユースケースコントローラIMOのほうがいいと思うほうがいいです。私は、5つの別々のサービスを持つことは、おそらくカプセル化が優れているにもかかわらず、構成/保守/展開のオーバーヘッドを増加させることがあることを指摘しています。必ずしもそうではありませんが、それは留意する価値があります。 – Stimul8d

関連する問題