我试图确定在ASP.NET MVC 5中实现Uncle Bob的尖叫架构是否可能(或实际),而不是使用默认的文件夹结构.
以下是尖叫架构描述的链接:http://blog.8thlight.com/uncle-bob/2011/09/30/Screaming-Architecture.html
假设的文件夹结构看起来像这样:
根
相应的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文件夹中而不是在子文件夹).
我正在使用域驱动设计和测试驱动开发的项目.在阅读Evans的DDD书籍时,我注意到他没有为域中的聚合根定义接口.
如果我同时执行DDD和TDD,我应该为每个聚合根定义接口,以使聚合根类易于测试和模拟吗?如果是这样,我是否还应该为聚合根中包含的每个实体定义接口?
从我在Google和StackOverflow上的搜索中,我发现了接近我正在寻找的答案,但是我在做DDD和TDD时都特别寻求建议,因为我的假设是在进行TDD时可测试性可能在我到目前为止看到的答案中被忽略了.
我希望能够自动创建一个新数据库,如果它不存在,使用代码优先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会抱怨.
任何满足这些需求的见解或替代选择都将不胜感激.谢谢!
我正在尝试使用新的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)