1

本当の DDD に移行する最初のプロジェクトで、このシナリオでどのコースを取るべきかについて、いくつかの疑問が残ります...

私は分散アーキテクチャを使用しており、複数のアプリケーションのユーザーが認証できるアカウントを 1 つだけ持っています。このアカウントは、独自のシステムで作成することも、ユーザーが自分のログイン情報を Facebook、Google、その他のサードパーティ アカウント プロバイダーと共有することもできます。

したがって、この目的のためだけのプロジェクトがあり、ユーザー アカウントを制御します。

このシナリオにより、モデル内でこのアプローチが採用されました(簡略化):

public class User
{
    public User(string name)
    {
        Id = Guid.NewGuid();
        Name = name;
    }

    public Guid Id { get; protected set; }

    public string Name { get; protected set; }
}

public abstract class Account
{
    protected Account(User user)
    {
        Id = Guid.NewGuid();
        User = user;
    }

    public Guid Id { get; protected set; }

    public User User { get; protected set; }
}

public class MySystemAccount : Account
{
    public MySystemAccount(string email, string password, User user)
        : base(user)
    {
        Email = email;
        Password = password;
    }

    public string Email { get; protected set; }

    public string Password { get; protected set; }
}

public class FacebookAccount : Account
{
    public FacebookAccount(string facebookId, User user)
        : base(user)
    {
        FacebookId = facebookId;
    }

    public string FacebookId { get; protected set; }
}

問題は、他のアプリケーションが REST サービスを介してこのプロジェクトにアクセスすることです。

そこで、json に動的なフォームを提供する単一の /Authenticate サービスについて考えました。電子メール/パスワードを含むjson、またはfacebookIdを含むjsonを作成できます。

しかし、どうすればレイヤーを接続できますか?

アプリケーション サービスを作成することを考えましたが、何が起こっているかを誰がどのように決定する必要があるか、残りのサービスがアプリケーションに何を通信する必要があるか、およびアプリケーションがそのことを行うことをどのように認識するか、それがどのような種類の認証であるかに行き詰まりました。自分のドメインのユーザーまたは Facebook のユーザーなど..

これについて何か考えはありますか?

ありがとう!

4

2 に答える 2

1

これは複数の部分からなる質問のようです。1つはオブジェクトモデルとポリモーフィズムに関するもので、もう1つはアーキテクチャに関するものです。

オブジェクトモデルに関しては、このシナリオでは継承の使用は理想的ではありません。の各サブタイプにAccountは、実際にはそれほど特定の動作や動作はまったくありません。唯一の専門分野は、さまざまなデータフィールドの存在です。さらに、継承を使用すると、永続性が複雑になります。

アーキテクチャ上、あなたが達成しようとしているのはフェデレーションIDです。これは基本的に、ユーザー(ID)の概念を認証プロセスから切り離します。これにより、残りのすべてのアプリケーションコードが認証の懸念を回避し、ユーザーのIDのみに依存できるようになります。OpenIDと、C#でOpenIDの実装を提供するDotNetOpenAuthライブラリをください。

于 2012-12-26T18:59:32.837 に答える