1

わかりました、これが wcf Web サービスでどのように機能するか混乱しています。

私は持っている

プログラム (ID に関連付けられている)
グループ (GroupID)
タグ (TagsID)
ユーザー (UserID)

ここで、グループが番組に関連付けられ、タグもグループに関連付けられ、ユーザーがそれらすべてに関連付けられているとしましょう。

たとえば、グループCSharpは Program Computingとタグwebserviceおよびrestに関連付けられていますが、rest タグもグループasp.netに関連付けられています。rest に関連付けられているすべてのグループを返すにはどうすればよいですか?

私は持っている:

IGroupService
IProgrammeService
ITagService
IUsers

それらを関連付けて、グループに属するユーザーやタグなどに関連するグループを返すにはどうすればよいですか?

4

1 に答える 1

1

質問を理解しているかどうかわかりません。サービスへの 1 回の呼び出しでこのすべての情報を返そうとしていて、これらすべての関係 (および循環参照の可能性が最も高い) を持つこのタイプのオブジェクト グラフのデータ コントラクトはどうなるのだろうか?

私はおそらく最新の情報で質問についてもっと混乱していますが、これで最後にもう一度突き刺します. もっと紛らわしいのは、「エンティティ」という用語への言及だと思います。これはEFの質問ですか?リンクがEFの問題である場合、コードファーストのアプローチが取られているとしか思えません。グループをタグにリンクする例は、次のようになります。

    public class Group
    {
        public Group()
        {
            Tags = new List<Tag>();
        }
        public string Name { get; set; }
        public List<Tag> Tags { get; set; }
    }

    public class Tag
    {
        public string Name { get; set; }
    }

Linq を使用して特定のタグを持つすべてのグループをクエリするには、次のようにします。

        public List<Group> GetGroups(string TagName)
        {
            List<Group> groups = (from g in _program.Groups where 
             (from t in g.Tags where t.Name == TagName select t).Count() > 0 
              select g).ToList();
            return groups;
        }

SOAP を使用している場合、クライアントでプロキシを作成し、サービスの呼び出しは次のようになります。

        string tagName = "rest";
        List<Group> groups = proxy.GetGroups(tagName);

REST API を作成している場合、それは単純な HTTP 要求になります。

http://server/api/GetGroups?tagName=rest

サービスがグループを表す XML または JSON を返す場所。

サービスの操作とデータ コントラクトが含まれていると思われる多くのインターフェイスをリストします。エンティティごとにサービスを分割する必要は必ずしもありません。また、特定の操作やデータ コントラクトをどこに配置するかについて混乱を招く可能性もあります。サービスが複数のエンティティの情報を返す場合、サービス全体でデータ コントラクトを繰り返す必要があります。エンティティごとにサービスを分割しても、それほどメリットはありません。あなたとサービスのユーザーにとって、より困難になるだけです。

于 2012-04-05T12:04:54.817 に答える