小编Mat*_*nze的帖子

ASP.NET MVC 5中的自定义文件夹结构

我试图确定在ASP.NET MVC 5中实现Uncle Bob的尖叫架构是否可能(或实际),而不是使用默认的文件夹结构.

以下是尖叫架构描述的链接:http://blog.8thlight.com/uncle-bob/2011/09/30/Screaming-Architecture.html

假设的文件夹结构看起来像这样:

  • 顾客
    • 控制器
      • CustomerController.cs
    • 楷模
      • Customer.cs
    • 查看
      • Index.cshtml
      • Details.cshtml
      • Update.cshtml
  • 雇员
    • 控制器
      • EmployeesController.cs
    • 楷模
      • Employee.cs
    • 查看
      • Index.cshtml
      • Details.cshtml
      • Update.cshtml
  • 共享
    • 查看
      • _Layout.cshtml
      • Error.cshtml
  • _ViewStart.cshtml
  • Web.config文件

相应的URL路由如下所示:

我创建了一个自定义的RazorViewEngine并添加了适当的视图位置格式(例如"〜/ {1}/Views/{0} .cshtml")和部分视图位置格式(例如"〜/ Shared/Views/{0}". CSHTML").我还将共享的_ViewStart.cshtml移动到根目录,并将Views/Shared文件夹的web.config与根级web.config合并,以避免在所有View文件夹中复制这两个文件.

一切都很好,但是,如果我尝试导航到索引页面(例如http://www.example.com/employees/),我会收到403.14错误(禁止).所有其他路线(包括http://www.example.com/employees/index)都可以正常工作.

我的猜测是IIS明确阻止了到控制器索引方法的路由,因为URL与文件系统中的文件夹一致,默认情况下禁用目录浏览.但是,如果我启用目录浏览,它实际上需要我到实际的目录列表而不是路由到控制器的索引方法.

我可以将Customers和Employees文件夹移动到子文件夹中(即将它们移出根目录)并且一切正常,但我想尝试将这些文件夹保持在顶层(根据Screaming Architecture指南).

有没有人有这个问题的解决方案?

请注意,MVC区域不是我正在寻找的解决方案,因为它不允许上述文件夹结构(即以高级用例和视图命名的顶级文件夹直接包含在Views文件夹中而不是在子文件夹).

architecture asp.net iis asp.net-mvc asp.net-mvc-5

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

聚合根应该在域驱动设计中实现接口

我正在使用域驱动设计和测试驱动开发的项目.在阅读Evans的DDD书籍时,我注意到他没有为域中的聚合根定义接口.

如果我同时执行DDD和TDD,我应该为每个聚合根定义接口,以使聚合根类易于测试和模拟吗?如果是这样,我是否还应该为聚合根中包含的每个实体定义接口?

从我在Google和StackOverflow上的搜索中,我发现了接近我正在寻找的答案,但是我在做DDD和TDD时都特别寻求建议,因为我的假设是在进行TDD时可测试性可能在我到目前为止看到的答案中被忽略了.

tdd domain-driven-design

7
推荐指数
1
解决办法
1396
查看次数

在禁用自动迁移的实体框架6中自动创建数据库

我希望能够自动创建一个新数据库,如果它不存在,使用代码优先EF6但禁用自动迁移.

如果我没记错,在实体框架中存在自动迁移之前,这样就可以了.但是,在EF6中,我收到以下异常:

EntityFramework.dll中出现"System.Data.Entity.Migrations.Infrastructure.AutomaticMigrationsDisabledException"类型的例外,但未在用户代码中处理

附加信息:无法更新数据库以匹配当前模型,因为存在挂起的更改并且已禁用自动迁移.将挂起的模型更改写入基于代码的迁移或启用自动迁移.将DbMigrationsConfiguration.AutomaticMigrationsEnabled设置为true以启用自动迁移.

为了验证此异常不是由我的生产项目中的外部因素引起的,我创建了一个新的测试项目.但是,我得到了同样的例外.

对于我的数据库上下文,我有:

public class MyContext : DbContext
{
    public DbSet<Entity> Entities { get; set; }

    public MyContext()
    {
        Database.SetInitializer(new CreateDatabaseIfNotExists<MyContext>());
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我添加了数据库迁移配置文件以禁用自动迁移:

public class DatabaseConfiguration : DbMigrationsConfiguration<MyContext>
{
    public DatabaseConfiguration()
    {
        this.AutomaticMigrationsEnabled = false;
    }
}
Run Code Online (Sandbox Code Playgroud)

我只需要能够创建一个新数据库(如果不存在)(因此我可以快速删除并重新创建一个新数据库,以便在我的开发机器上快速开发).但是,我不想启用自动迁移,因为我们使用第三方工具进行生产中的迁移,并且如果在启用自动迁移时架构已更改,EF6会抱怨.

任何满足这些需求的见解或替代选择都将不胜感激.谢谢!

entity-framework entity-framework-6

3
推荐指数
1
解决办法
1万
查看次数

使用AppendTextAsync附加到Azure附加Blob导致缺少数据

我正在尝试使用新的Azure附加blob和Azure Storage SDK 6.0.0为Azure中的应用程序创建记录器.因此,我创建了一个快速测试应用程序,以便更好地了解追加blob及其性能特征.

我的测试程序只循环100次,并在append blob上附加一行文本.如果我使用同步AppendText()方法一切正常,但它似乎仅限于每秒写5-6个附加.所以我试图使用异步AppendTextAsync()方法; 但是,当我使用这个方法时,循环运行得更快(如预期的那样),但附加的blob缺少大约98%的附加文本而没有抛出任何异常.

如果我Thread.Sleep在每次追加操作之间添加一个并且休眠100毫秒,我最终会得到大约50%的数据.睡眠1秒,我得到所有的数据.

这看起来类似于在v5.0.0中发现但在v5.0.2中修复的问题:https://github.com/Azure/azure-storage-net/releases/tag/v5.0.2

如果您想尝试重现此问题,这是我的测试代码:

static void Main(string[] args)
{
    var accountName = "<account-name>";

    var accountKey = "<account-key>;

    var credentials = new StorageCredentials(accountName, accountKey);

    var account = new CloudStorageAccount(credentials, true);

    var client = account.CreateCloudBlobClient();

    var container = client.GetContainerReference("<container-name>");

    container.CreateIfNotExists();

    var blob = container.GetAppendBlobReference("append-blob.txt");

    blob.CreateOrReplace();

    for (int i = 0; i < 100; i++)
        blob.AppendTextAsync(string.Format("Appending log number {0} to an append blob.\r\n", i));

    Console.WriteLine("Press any key to …
Run Code Online (Sandbox Code Playgroud)

azure azure-storage azure-storage-blobs

3
推荐指数
1
解决办法
1732
查看次数