2

現在、エンティティフレームワークを使用しながらASP.NETMVC4で作業しています。私はこれまでMVCを使用したことがなく、次のレイヤーでプロジェクトを構築しました。

  • GUI(モデル、ビュー、コントローラー、...)
  • DAL(エンティティデータベースとリポジトリ+ IRepository)
  • BL(私の質問で)
  • 一般
  • WCF
  • テスト

現在、GUIレイヤーのモデルを使用するクエリをBLに記述しようとしています。GUIを単純に参照することはできないので、ここで何をすべきか本当にわかりません。

これが私がやろうとしていることからのコードです:

私のBLでは:

public static List<PSNAdres> GetAdres(IZoekRepository repo)
{
    List<PSNAdres> lijstTypes = (from t in repo.PSNAdres
                      select new PSNAdres {t.Gemeente, t.Straat, t.Postcode}).ToList(); 

    return lijstTypes;
}

私が言ったように:私はMVCに不慣れです。このレイヤーレイアウトは、MVCスペシャリストが使用するように指示したものであり、これが彼の動作方法です。

4

2 に答える 2

2

あなたが何を求めているのかわかりませんが、ここに私の答えがあります。アドレスリストを提示するための簡単なシナリオ:

モデルの表示:

public class AddressListViewModel 
{
    public List<AddressViewModel> AddressList { get; set; }
    public bool CanAdd { get; set; }
}

public class AddressViewModel
{
    public string Country { get; set; }
    public string City { get; set; }
    public string Street { get; set; }
    public bool CanEdit { get; set; }
    public bool CanDelete { get; set; }
}

BL:

public static List<Address> GetAddressList()//Doesn't take repository here, repositories are injected in constructor
{
    return adresRepo.PSNAdres.ToList(); 
}

コントローラ

public class AddressController : BaseController
{
    public ActionResult List()
    {
        var addressList = blObject.GetAddressList();
        var model = new AddressListViewModel();
        model.AddressList = addressList.Select(a => 
            new AddressViewModel 
            {
                Country = a.Country.Name,
                City = a.City,
                Street = a.Street,
                CanDelete = ...check user access here...,
                CanEdit = ...check user access here...
            });

        model.CanAdd = ...check user access here...

        return View(model);
    }
}
于 2012-04-13T08:57:06.153 に答える
1

GUIレイヤーは、他のレイヤーによって提供される機能の単なる消費者です。

結果として、あなたの問題はそこにモデルがあることに起因します。プロジェクトをレイヤーに分割する場合は、モデルを移動する必要があります。

Visual Studioによって作成された既定のプロジェクトでは、GUIプロジェクトをレイヤーに分割しない場合に備えて、GUIレイヤーにモデルのみが含まれます。つまり、初心者です。それはMVCアプローチとは何の関係もありません。レイヤーを分割するときは、モデルを「ドメインレイヤー」に移動する必要があります(以下を参照)。

したがって、これ以上面倒なことはせずに、モデルをGUIレイヤーから移動します。

設計よりも実用的なアプローチは、SteveSandersonとAdamFreemanが提唱するドメイン設計に従うことです(Pro ASP.NET MVC 3.0 Framework、Apress [バージョン4の本はまだ出ていません])。それはあなたのデザインに似ていますが、より実用的です。詳細に立ち入ることなく、そのアプローチでは、モデルとビジネスレイヤーをドメインプロジェクトに分離します。それはあなたにはるかに実用的なデザインを与えます。

特定の要件がない限り、WCFもおそらくやり過ぎだと思います。MVCは、必要な場所でサービス指向のアプローチを提供するように設計されています。

SSandersonとAFreemanの本を読むことをお勧めします。それはあなたに多くの苦痛を免れるでしょう。

于 2012-04-13T09:27:52.193 に答える