小编Dav*_*ham的帖子

需要有关ASP.NET MVC 3架构的一些指导

我是一位经验丰富的.NET开发人员,主要使用webforms.我熟悉MVC但尚未商业化使用.我目前正在这个领域进行一些自我教育,并且对建筑学主题的意见分歧感到有些困惑,让我在这个问题的前面加上一个理解,即没有正确或错误的答案,但我只是在寻求什么是优雅的解决方案.

我会开始时说,我不使用实体框架或任何形式的ORM的 - 我想直接实现自己的业务对象和数据访问代码(使用ADO,存储过程等),以确保它们是最佳的,这是一个个人喜好.这是我努力寻找一致信息的地方,因为看起来大多数信息都与使用LINQ to SQL或实体框架有关.

我的应用程序已经结构化了以下项目:

  • Web(MVC 3 Web应用程序)
  • 模型(类库)

只有两个项目,因为我遇到了解耦问题; 这是我问题的根源.我的模型类库包含......

  • 带有字段和属性的经典业务对象
  • 每个业务对象的存储库类,包含数据访问代码(ADO.NET直接SqlDataReaders等)
  • 每个存储库类的接口

我遇到的问题是所有这些层之间的依赖关系.它感觉不对劲!

1.业务对象应该包含实现业务逻辑的方法,所以除了字段和属性之外还有实现任何所需逻辑的方法吗?

2.存储库类执行数据访问代码但是知道业务对象,这又感觉不对,数据访问代码应该位于自己的类库中,对这些对象一无所知?

3.控制器(在Web层中)利用存储库接口,但为什么?它们不应该包含业务逻辑,"模型"或业务对象应该包含哪些?控制器当然不应该包含业务逻辑,所以这是不对的.我不希望存储库中存在业务逻辑,因为它们正在访问数据库.

我正在努力为应用程序找到一个优雅的架构,只是一个基本的概述如何实现我自己的对象,我自己的数据访问代码,并确保应用程序松散耦合.有人可以给我任何指导吗?

.net c# repository-pattern asp.net-mvc-3

10
推荐指数
1
解决办法
1280
查看次数

ASP.NET MVC 3 Viewmodel模式

我正在尝试在创建新对象的情况下找出使用viewmodel的最佳方法.

我有一个非常简单的视图模型,其中包含联系对象和公司的选择列表.

private ICompanyService _Service;
public SelectList ContactCompanyList { get; private set; }
public Contact contact { get; private set; }

public ContactCompanyViewModel(Contact _Contact)
{
    _Service = new CompanyService();
    contact = _Contact;
    ContactCompanyList = GetCompanyList();
}

private SelectList GetCompanyList()
{
    IEnumerable<Company> _CompanyList = _Service.GetAll();
    return new SelectList(_CompanyList, "id", "name");       
}
Run Code Online (Sandbox Code Playgroud)

然后我有联系控制器使用这个视图模型,并让我为我的联系人选择一个相关的公司.

[Authorize]
public ActionResult Create()
{                       
    return View(new ContactCompanyViewModel(new Contact()));
}
Run Code Online (Sandbox Code Playgroud)

我的问题是控制器上的create方法.

[Authorize]
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(Contact _Contact)
{
    try
    {
        _Service.Save(_Contact);
        return RedirectToAction("Index");
    }
    catch
    {
       return View();
    } …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc-3

5
推荐指数
1
解决办法
3610
查看次数

无法将模型传递到布局页面内的局部视图中

我在该布局中有一个布局页面我使用了局部视图,局部视图包含我已经构建的菜单功能,我将菜单拆分为局部视图以确保它易于维护.菜单特意放置在布局中,因为它用于每个页面,但菜单中有条件元素,某些选项仅出现在某些页面上.

我偶然发现了将来会出现什么问题,菜单使用ajax调用来呈现包含内容的部分视图(减少页面加载)我只是在一个包含公司的页面上工作,该公司包含一个联系人列表,单击时的菜单选项应显示联系人列表.我已经在公司模型下加载了联系人列表,但是!我无法从应该呈现联系人列表的新部分视图中访问它,因为菜单是布局页面中包含的部分视图,因此无法接受模型,因此我无法将模型传递到局部视图中我正在尝试加载,因为菜单部分视图位于布局页面中.

这是一个棘手的情况,我显然可以更改布局以呈现一个新的部分来包含菜单,这样我就可以将新的视图模型传递给它,但是我构建的每一个页面都需要引用菜单(这是什么害虫!)我必须在这里遗漏一些东西(考虑到这是我可能的第一个MVC3应用程序).有什么建议?

编辑:我自己更进一步,简而言之,我的布局页面将始终能够访问使用它的页面模型,因此包含菜单的部分视图也可以访问该数据.我在菜单部分视图中编写了一些条件逻辑,用于检查页面,然后根据需要传入数据.

<div class="menu">    
    <ul>
        <li><a href="@Url.Action("Create", "Contact")">New Contact </li>
        <li><a href="@Url.Action("Index", "Contact")">Contact List </a></li>
    </ul>
    @if (Request.Url.PathAndQuery.Contains("/Contact/Details/"))
    {
        <ul>
            <li>@Html.ActionLink("New Activity", "Create", "Activity", new { companyid = 0, contactid = Model.contact.id }, null)</li>
        </ul>
    }
</div>
Run Code Online (Sandbox Code Playgroud)

以上是菜单局部视图的一小部分示例,但包含一个示例,其中为联系人/详细信息页面构建菜单,并且能够传入model.contact.id.它的工作原理是我的菜单和我的布局没有明确地包含模型,但它感觉不是很整洁.

partial-views asp.net-mvc-3

2
推荐指数
1
解决办法
1598
查看次数