我一直在阅读有关DDD的信息,我认为我可能错误地使用了服务,或者至少以不那么理想的方式使用服务.我的服务类往往有很多包含存储库引用的实例变量,它们似乎做了很多工作(即有很多方法).
是否可以创建更有针对性的服务?像每个服务执行某些特定逻辑的方法一样?此外,服务类应该将实例变量存储到其他实体吗?我读到了一些关于无状态服务的内容,我不确定是否通过使用这些实例变量来破坏该规则.
谢谢!
我有一个多对多表,用于存储用户可以拥有的每个允许角色的记录.如果用户更新了他的角色(添加和删除)角色,我该如何处理?
我应该首先删除所有用户角色,然后添加所选用户角色吗?还是做某种匹配?
我正在努力了解如何最好地查询存储库.
现在让我通过循环的三个因素是:
第1点
关于问题一:
我有很多方法的存储库返回实体和标量值的组合.这似乎导致"方法爆炸".我应该总是返回一个Entity对象吗?我该如何查询只需要一列的对象?
第2点 当运行查询时,我是否应该包括表中的每一列,即使我只需要一列或两列?如果我为此创建特定查询,则会导致存储库中有更多方法
第3点 我应该如何为查询提供条件?我读到了有关规范的内容,但我的理解是您遍历返回的记录并过滤掉传入新集合的记录.这似乎不是一个明智的表现.现在我只是在Repo中创建一个新方法,如getNameById(),它封装了条件.
请注意,我没有使用ORM,我只是在我的存储库中有原始sql.
更新
第1点: 根据答案和更多的研究,这将是一个很好的实施?
现在我有一个大型存储库,它返回标量和实体类型对象的混合(所有相同的实体).我想如果我只使用GetUser(userId)方法并忘记编写只返回单列值的方法,我可以大大减少这个.
例如,如果我需要返回一个用户名,我可以调用GetUser(userId)方法来润滑User对象,然后在服务层中将其过滤到用户名.
另一种方法是使用某种我可以传递到Repository的QueryBuilder类,可以解析它以生成正确的sql.
第2点
回顾这一点非常类似于第一点,我目前的解决方案是只获取所有表字段.这是性能和可维护性之间的权衡.
第3点
我需要提供某种where子句.我不确定这是否有意义通过规范或只是一个SQL字符串.我目前的解决方案是为这些类型创建新的方法,但我想要一些更通用的存储库
总的来说,仍然在研究这个......我希望能够听到更多关于这一点的信息,或者链接到书籍或参考文献,将这一切联系在一起.
c# domain-driven-design repository ddd-repositories repository-pattern
我有一个Web应用程序,我想从数据库中提取用户设置并存储它们以进行全局访问.将数据存储在Singleton或Session对象中会更有意义吗?这两者有什么区别?
将数据存储为对象引用还是将其分解为值类型对象(整数和字符串)更好?
我有一个网站,其区域需要身份验证.现在我在该区域的所有控制器上使用roles属性,并运行查询以检索该用户ID及其所有设置.
对于我来说,每次该区域的控制器加载时,我正在检索用户标识和设置,这似乎是代码或设计的气味?我不确定我是否应该使用会话,或者ASP.Net MVC 2.0是否提供了一些独特的方法来处理这个问题.另一个问题是安全性.
总的来说,我真的不知道转向哪种方式.设计明智我想在用户登录该区域时只检索一次userId和设置.现在我每次控制器加载时都会抓取userId,然后如果需要,我每次都会查询数据库的设置.
其他设计师如何规范浏览器的填充和边距.我已经尝试过CSS Resets(目前正在使用YUI),但是我仍然遇到很多不一致的问题.
对于某些元素,似乎某些浏览器将填充或边距设置为0px将触发浏览器使用由该浏览器确定的默认填充和边距.有没有办法硬重置所有浏览器的填充或边距,以便有一致的外观?
更新
从其他研究和反馈看来,几乎不可能让网站在不同的浏览器中看起来相同.我想我会坚持使用CSS重置,只是尝试更好地规划我的网站.
我不确定如何克服覆盖样式设置的默认浏览器机制,这可能需要付出太多努力.
存储库类应该进入哪一层?域名或基础设施?
我正在sql server 2008中编写存储过程.问题是@ErrorMessage out参数始终为null.它似乎与ERROR_MESSAGE()函数有关,因为当我摆脱它时,返回消息的其他部分.
如何让它返回整个errorMessage?
-- Log transaction
INSERT INTO Transactions (TxnId, TypeId, [Date], Amount)
VALUES(@TxnId, @TypeId, @TransDate, @Amount)
-- Check for errors
IF @@ERROR <> 0
BEGIN
PRINT 'Starting third error block'
SET @ErrorCode = 202
SELECT @ErrorMessage = 'Err_TxnId_Exists - Error inserting: ' + ERROR_MESSAGE()
PRINT @ErrorCode
PRINT @ErrorMessage
PRINT 'Ending third error block'
RETURN 1
END
Run Code Online (Sandbox Code Playgroud)
消息输出
该语句已终止.启动第三错误块202
结束第三个错误块
(1排受影响)
结果
(1排受影响)
我似乎找不到任何关于new []应该是什么的文档.从下面的例子看,它似乎是一个对象数组的简写
var json = new[] {
new object[] {"20-Jun-2008", 200 },
new object[] {"20-Jun-2009", 250 }
};
Run Code Online (Sandbox Code Playgroud) c# ×3
asp.net-mvc ×2
asp.net ×1
css ×1
css-reset ×1
javascript ×1
jquery ×1
many-to-many ×1
new-operator ×1
repository ×1
sql-server ×1
t-sql ×1