我正在使用DDD模式开发类似企业的项目.我在C#解决方案中有以下项目:
域模型 - DLL项目
WebUI - ASP.NET MVC3项目
DesktopUI - WPF项目
DAL - 实体框架代码优先
持久性 - SQL Server数据库
这个项目并不大,但我正在尝试使用企业应用程序的所有良好实践.
我现在要定义的是异常策略,但我不确定如何处理它.我应该使用企业库异常处理和记录块,但我不知道如何将其纳入图片.我想在脑海中解决的一些具体情况如下:
如果用户在WPF应用程序中创建了新实体,并且单击了"保存"按钮,则如果在不同级别发生异常(例如,根据域规则未正确创建实体,或者存在尝试将新对象持久保存到数据库时出错
用户尝试从数据库中检索未知实体(例如,通过在URL中指定未知实体Id从WebUI中检索)
我知道我可以定义自定义异常,但我不确定在何处和如何.它们应该按每层定义吗?我知道有包装异常练习但又不太确定如何最好地使用该模式.
我也应该为某个层中的每个错误创建一个自定义异常(例如,UserAlreadyExistInDatabaseException尝试使用相同的电子邮件保存两个用户,如果尝试从DB中获取未知用户则为UnknownUserDatabaseException),或者我应该有一个处理多个层错误的异常类型(例如,DatabaseException,然后使用自定义属性或Exception.Message属性区分错误).
我试图通过实现IEnlistmentNotification接口创建自定义"资源管理器" .该接口有以下方法:
虽然很清楚回滚代码应该在Rollback()方法中,但我不确定在哪种方法中应该实现执行实际操作的代码?它应该在Prepare()或Commit()中,还是在类中的一些其他自定义方法中,这些方法将从TransactionScope块内部的外部代码中调用?
我正在使用无状态框架(https://code.google.com/p/stateless/)在我的应用程序中建模有限状态机.某些状态应该执行某些逻辑,然后立即进入下一个状态.我想知道这样做的好习惯如下:
var machine = new StateMachine<State, Trigger>(State.Idle);
machine.Configure(State.StateA)
.OnEntry(() =>
{
DoSomeStuff();
_machine.Fire(Trigger.TriggerB); // move to StateB
});
Run Code Online (Sandbox Code Playgroud)
这是一个很好的FSM设计吗?如果没有,那会有什么更好的方法?我试图实现的想法是让某些状态自动将机器推进到下一个状态,而不需要等待DoSomeStuff()完成然后触发机器在下一个状态下移动的外部代码.
我有一个依赖于字符串的类:
public class Person
{
private readonly string _name;
public Person(string name)
{
if (name == null) throw new ArgumentNullException("name");
_name = name;
}
}
Run Code Online (Sandbox Code Playgroud)
该字符串'name'仅在运行时才知道,例如.它在配置中定义.所以我有这个提供这个字符串的接口:
public interface IConfiguration
{
string Name { get; }
}
Run Code Online (Sandbox Code Playgroud)
这两种类型,Person和IConfiguration(其实现在这里并不重要)都在Windsor容器中注册.
问题:如何告诉WindsorCastle容器它应该将IConfiguration的Name属性注入Person类的构造函数?
警告:我不想将IConfiguration注入Person类或使用类型化的工厂...... Person类必须简单并且只接受字符串作为参数.
.net c# dependency-injection castle-windsor inversion-of-control
标题中的问题几乎总结了一下.我在XAML中定义了一些资源对象,我也想在后面的代码中访问它.那么有没有办法在一个地方定义x:Key而不是硬编码x:XAML和后面的代码中的Key(作为字符串)?
我是C#开发人员,我想使用工厂模式来创建表示硬盘上的文件或目录的对象.FileInfo和DirectoryInfo是用于此目的的.NET中的类,但是我想拥有自己的包含它们的IFileInfo和IDirectoryInfo接口而不是它们.使用自定义接口而不是内置类的原因是因为我想添加一些其他属性,如文件shell图标等...
所以我想使用工厂模式为文件/目录路径的给定字符串创建IFileInfo和IDirectoryInfo的实例.
所以工厂类看起来像:
public class MyFileInfoFactory
{
IFileInfo Create(string filePath)
{
System.IO.FileInfo file = new System.IO.FileInfo(filePath);
// turn FileInfo to my IFileInfo etc...
}
}
Run Code Online (Sandbox Code Playgroud)
现在看一下System.IO.FileInfo文档(FileInfo MSDN),我看到有几种可能的异常可以抛出.我的问题是我应该在工厂Create()方法中处理所有这些异常吗?或者我应该让它们向上传播到调用MyFileInfoFactory.Create()的代码?
如果第一个解决方案是可行的,那么下一步将是什么?例如,我应该返回null还是可能抛出一些自定义异常,并将InnerException属性设置为从新FileInfo()构造函数抛出的实际异常?
只是想知道在这个具体情景案例中最佳做法是什么......
我是新手试图了解Express 4.x路由,我正在阅读他们的指南:http://expressjs.com/guide/routing.html
在最后一段中,它说:
express.Router类可用于创建模块化可安装路由处理程序.路由器实例是一个完整的中间件和路由系统
和随附的代码是:
var express = require('express');
var router = express.Router();
Run Code Online (Sandbox Code Playgroud)
为什么这个express.Router构造函数在没有new运算符的情况下调用普通函数?他们在文档中说它是一个类,他们根据javascript样式(大写第一个字母)命名它,但是它们(以及所有其他在线示例)将它用作普通函数.
在 Vuetify周历示例中,每一天都显示为包含完整 24 小时的列。是否可以限制此范围并仅显示每天的某些时间?例如。仅显示上午 9 点至下午 17 点的时间(每天的典型工作时间)。这将减少日历在屏幕上的整体高度并且更加清晰,但我找不到如何做到这一点的方法。
假设我要创建一个行动网站,会员可以在其中竞标物品。为了对此域建模,我有三个类:成员,项目和出价。我的头脑风暴将是这样的:
考虑到所有这些,很明显,由于Member和Item对象是独立的,因此我们可以认为它们是集合根。出价将是其中一项的一部分。很明显,但是现在让我感到困惑的是,我应该选择哪个聚合根?项目或会员?
这是Apress的Pro ASP.NET MVC 3 Framework书中的示例,其执行方式如下所示:

给出以下代码:
public class Member
{
public string LoginName { get; set; } // The unique key
public int ReputationPoints { get; set; }
}
public class Item
{
public int ItemID { get; private set; } // The unique key
public string Title { get; set; }
public string Description { get; set; }
public DateTime AuctionEndDate { get; set; }
public IList<Bid> Bids { get; set; } …Run Code Online (Sandbox Code Playgroud) 假设DeveloperA在git存储库(在他的计算机上本地)上运行,并且还有一些文件在下一次提交的索引中暂存.如果DeveloperB然后通过"git clone"命令克隆此存储库,他是否还将从developerA的存储库中接收暂存区域的内容?
我是ASP.NET MVC新手(但.NET经验丰富的开发者),我正在努力学习如何正确设置Web应用程序基础结构.存储库模式是我现在正在考虑的,在过去几天阅读了几十篇博客/文章/答案后,我仍然不确定如何以正确的方式使用它.我正在学习Pro ASP.NET MVC 4 Adam Freeman,这里是基于本书的存储库接口代码:
public interface IRepository<T>
{
IQueryable<T> FindAll();
IQueryable<T> Find(Expression<Func<T, bool>> predicate);
void Add(T newEntity);
void Remove(T entity);
T FindById(long id);
}
Run Code Online (Sandbox Code Playgroud)
经过更多的在线研究,我意识到许多人认为从存储库中返回IQueryable是不好的做法,我(大多数时候)可以理解为什么.但是,我似乎无法找到具体替代方案的答案?我知道有一个自定义存储库的想法,对于每个实体,每个可能的查询都有专门的方法,基本上会返回IEnumerable而不是IQueryable ......但这对我来说似乎不对(它也不是优雅的解决方案)许多代码编写和可能的代码冗余等...).
还有什么其他选择?
.net ×5
c# ×4
aggregate ×1
enterprise ×1
exception ×1
express ×1
factory ×1
fileinfo ×1
git ×1
git-clone ×1
iqueryable ×1
javascript ×1
node.js ×1
resources ×1
root ×1
transactions ×1
url-routing ×1
vue.js ×1
vuetify.js ×1
wpf ×1
xaml ×1