假设我有一个存储库,它返回一个Post
s 列表.存储库接口有一个GetAll()
方法可以完成它的建议.
现在按照我不应该将域逻辑放在存储库中的理论,我想拦截对具体GetAll()
方法的调用,以便我可以在GetAll()
结果中添加以下逻辑:
return GetAll().OrderByDescending(p => p.Posted).ToList();
Run Code Online (Sandbox Code Playgroud)
我想拦截这个的原因是因为(1)我不想让客户端记得调用扩展方法(OrderByDescending
或者一些无用的包装器),我想每次调用它,(2)我不我想让我所有的具体实现都记住订购GetAll()
结果 - 我想把这个逻辑放在任何存储库外部的一个地方.
最简单的方法是什么?
我已经在使用StructureMap,所以如果我可以拦截它,它可能是一个低成本选项.但我不认为SM拦截方法调用,只是创建对象实例?
我需要转到代理还是混合模式?我是否需要使用Castle Dynamic Proxy全押?或者是否有其他方法我应该考虑或者可能是一种组合?
我真的对上面我特定例子的具体建议感兴趣.我是AOP的新手所以请保持温柔.
对于Asp.Net软件作为服务应用程序,我想做基于帐户的子域,如Basecamp和其他37Signals产品.例如,acme.myapp.com将为该客户加载该帐户并仅撤回其信息.
这在Ruby on Rails中很容易实现,但是如何在ASP.NET MVC中处理这个功能并且能够扩展到可能数百个帐户?
这可能是一个长镜头.
在.NET世界中,有没有人发现具有NHibernate灵活性的ORM(商业或开放)支持域驱动设计并具有良好的Linq支持?Linq to sql已经死了,Entity Framework还没有很好地支持POCO的,懒惰的加载或对象的第一次开发,而且LLBLGen之类的旧版本似乎都没有.
有人在ORM市场找到任何新的和令人兴奋的东西吗?
谢谢!
我仍在学习 DDD,我有以下两个(可能很简单)的问题:
如果工厂创建了新的对象/图形/聚合实例,但也从Repository 中“重构”了对象/图形,则:
(1) 您的服务层功能/作业/任务/工作单元是否调用了工厂或实体实例或域服务功能上的行为方法?我对基于这些组件的职责的调用堆栈感到迷茫。
(2) Entity 实例甚至有像上面那样的“行为方法”吗?例如,Post 是否具有p.UpdatePost(string bodyText)
域模型的关注点,因此存储库也应该实现相同的目标?或者服务层功能,在这种情况下它是否应该调用 Repository 而实体实例只是具有特定于域的行为方法而不是持久性?但是,为什么听起来像“更新帖子”是用户的目标时的域功能?
你可以看到我到处都是。请帮忙。
考虑带有对象Post
和的典型博客Comment
。
对于我一直在构建的 DDD 演示示例,我(直到现在)发现实体Post
和Comment
都适用于同一个聚合——Post
聚合。但现在我不太确定..
在我的控制器,我发现,像你所期望的,我需要添加和删除Comments
的Posts
。使用我当前的模型,我不会跟踪Comment
全局的身份(就像蓝皮书建议的那样)。您可能期望我删除 a 的操作Comment
可能如下所示:
public ActionResult DeleteComment(int postID, int commentID)
Run Code Online (Sandbox Code Playgroud)
很显然,我需要Post
的ID从资源库中,并标识为特定检索Comment
上Post
,我想删除。
我的问题是DeleteComment(
动作的主体:
可以通过Post
查询机制遍历以获取Comment
删除吗?像这样:
var comment = this._postRepo.WithID(postID).Comments
.SingleOrDefault(c => c.ID == commentID);
this._postRepo.Delete(comment);
return RedirectToAction("detail", new { id = postID });
Run Code Online (Sandbox Code Playgroud)
..或者我应该Comment
从类似于这个的回购中选择?:
var comment = this._postRepo.CommentWithID(commentID)
Run Code Online (Sandbox Code Playgroud)
..或者:
var comment = this._postRepo.CommentWithID(postID, commentID)
Run Code Online (Sandbox Code Playgroud)
上面的两个例子可能看起来有点傻,因为Post
如果我可以 …
我想用MVC构建一个简单的站点,然后将"页面"和相应的"资产"(js,css,图像等)呈现给人们称之为"静态站点"的东西.
换句话说,我不想部署到支持MVC的IIS服务器.我只是想在MVC中构建网站,然后以某种方式将这些页面解析为静态html/css/etc文件,并将网站上传到常规LAMP主机.
有一种简单的方法可以实现自动化吗?NuGet包?二进制?MVC扩展可能是一个处理程序加载项,可以在一次传递中呈现静态站点?
考虑我的Event
班级,并将我DateTime
作为UTC日期存储在数据库中.我只想根据特定时区的当前日期返回过滤范围 - 这很简单吗?
这很好用:
IQueryable<Event> test1 = this.GetSortedEvents().Where(e => e.FinishDateTime.Date >= DateTime.UtcNow.Date);
Run Code Online (Sandbox Code Playgroud)
这也很好:
IQueryable<Event> test2 = this.GetSortedEvents().Where(e => e.FinishDateTime.AddHours(3).Date >= DateTime.UtcNow.AddHours(3).Date);
Run Code Online (Sandbox Code Playgroud)
..并且还符合我的时区要求.
所以在这里我想我可以将这个特定的转换移到这个扩展方法:
Run Code Online (Sandbox Code Playgroud)public static DateTime RiyadhTimeFromUtc(this DateTime utcTime) { return utcTime.AddHours(3); }
这不起作用:
IQueryable<Event> test3 = this.GetSortedEvents().Where(e => e.FinishDateTime.RiyadhTimeFromUtc().Date >= DateTime.UtcNow.RiyadhTimeFromUtc().Date);
Run Code Online (Sandbox Code Playgroud)
..我得到这个NotSupportedException:方法'System.DateTime RiyadhTimeFromUtc(System.DateTime)'没有支持的SQL转换.
这显然是垃圾,因为当相同的代码不在扩展方法中时,编译器很乐意将其转换为SQL.
在使用某些类型和最近的DateTime之前,我遇到了"没有支持的SQL转换"问题.但我上面的测试和此链接证明了SQL转换中应该支持AddHours方法.
如果有人能告诉我这里我做错了什么(或者解决这个问题的方法不同),我真的很感激.
我正在查看我在C#中编写的一段代码:
if(string.IsNullOrEmpty(param1) && string.IsNullOrEmpty(param2) && string.IsNullOrEmpty(param3))
{
// do stuff
}
Run Code Online (Sandbox Code Playgroud)
并决定使其更具可读性/简洁性
if(string.IsNullOrEmpty(param1+param2+param3))
{
// do stuff
}
Run Code Online (Sandbox Code Playgroud)
但看着它我忍不住畏缩.你对此有何看法?你有没有做过这样的事情,你是否适用它?
注意:此行之前的代码将通过添加特定项来操作集合,具体取决于param(param1,param2,param3)是否为空.此if语句用于验证/错误处理.
我正在尝试创建一个验证表达式来检查输入的长度并允许文本和标点符号(例如,?;:!"£$%)
到目前为止我想出的是"^\s*(\w\s*){1,2046}\s*$"
但是这不会允许任何标点符号.说实话,我在这方面非常粗略,所以任何帮助都将非常感谢!
谢谢,
史蒂夫
我有以下类对象:
public class VacancyCategory
{
public int ID { get; set; }
public string Text { get; set; }
public IList<VacancySubCategory> SubCategories { get; set; }
}
public class VacancySubCategory
{
public int ID { get; set; }
public string Text { get; set; }
public VacancyCategory Category { get; set; }
public IList<Vacancy> Vacancies { get; set; }
}
public class Vacancy : IBusinessObject
{
public int ID { get; set; }
public string Title { get; set; } …
Run Code Online (Sandbox Code Playgroud) asp.net-mvc ×3
asp.net ×2
c# ×2
aggregate ×1
aop ×1
blogs ×1
datetime ×1
interceptor ×1
lambda ×1
linq-to-sql ×1
mixins ×1
multi-tenant ×1
nhibernate ×1
object ×1
orm ×1
regex ×1
repository ×1
saas ×1
sql ×1
static-site ×1
string ×1
structuremap ×1
utc ×1
validation ×1