小编Jos*_*ker的帖子

关注点分离 - DAO,DTO和BO

所以我有一个DAO,DTO和BO.以下代码是结果:

// Instantiate a new user repository.
UserRepository rep = new UserRepository();

// Retrieve user by ID (returns DTO) and convert to business object.
User user = rep.GetById(32).ToBusiness<User>();

// Perform business logic.
user.ResetPassword();
user.OtherBusinessLogic("test");
user.FirstName = "Bob";

// Convert business object back to a DTO to save to the database.
rep.Save(user.ToDataTransfer<Data.DTO.User>());
Run Code Online (Sandbox Code Playgroud)

所以我试图分开关注点,但我想摆脱这段代码中的"转换"."转换"实际上位于业务逻辑层(DTO层不知道业务逻辑层)作为扩展对象.DTO本身显然只存储数据,并且没有任何业务逻辑.UserRepository调用DAO,在GetById结束时使用AutoMapper从DAO映射到DTO."转换"(ToBusiness和ToDataTransfer)完全按照他们的说法行事.

我的一位同事认为我可能需要有一个商业资源库,但认为它可能有点笨重.有什么想法吗?

.net c# java domain-driven-design business-objects

8
推荐指数
2
解决办法
6628
查看次数

OAuth简单服务提供商

我正在努力挑选出包含在DotNetOpenAuth中的OAuth服务提供商示例.我搜索了SO并发现了一些相似/相关的帖子,但没有什么真正有用的.是否有任何开源项目或ASP.NET MVC 2 OAuth服务提供商的简单/原始示例?我想使用OAuth的所有内容都是对服务进行身份验证.我打算用密钥/秘密来推销我自己的api,但是认为像OAuth这样经过试验和测试的协议可能是更好的解决方案.

.net c# api oauth dotnetopenauth

8
推荐指数
1
解决办法
8155
查看次数

DDD与N-Tier(3层)架构

我已经练习了DDD一段时间了4个不同的层:域,演示,应用程序和基础设施.最近,我向我的朋友介绍了DDD概念,他认为它引入了一个不必要的复杂层(特别是针对接口和IoC).通常,在这一点上,我解释了DDD的好处 - 特别是它的模块性.所有繁重的工作都在基础设施中,如果我想彻底改变基础数据访问方法,我只需触摸基础设施层存储库即可.

我朋友的论点是他可以用同样的方式构建一个三层应用程序:

  • 商业
  • 数据
  • 介绍

他将创建业务模型(如域模型)并使数据层中的存储库返回这些业务模型.然后他会调用称为数据层的业务层.我告诉他这种方法的问题在于它不可测试.当然,您可以编写集成测试,但是您无法编写真正的单元测试.你能否看到他提出的3层方法的任何其他问题(我知道有,因为为什么DDD会存在?).

编辑:他没有使用IoC.他的例子中的每一层都相互依赖.

domain-driven-design data-access-layer n-tier-architecture

5
推荐指数
2
解决办法
7326
查看次数

SQL Server双向事务复制 - 这是一个很好的用例吗?

我们在使用SQL服务器扩展时遇到了问题.这主要是由于以下几个原因:1)设计不良的数据结构,2)繁重的工作和业务/处理逻辑都是在T-SQL中完成的.这是由我们聘请的Redmond的Microsoft SQL人员在我们的服务器上进行分析验证的.我们通过不断增加命令超时来解决问题,这是荒谬的,而不是一个好的长期解决方案.此后,我们制定了以下战略和一系列阶段:

阶段1:在问题上抛出硬件/软件以止血.

这包括一些不同的东西,如缓存服务器,但我想在这里问每个人有关在新SQL服务器上实现双向事务复制的具体问题.我们有两个用例想要实现这个:

  1. 我们考虑在这个新的SQL"处理盒"上运行长时间运行(和表/行锁定)SELECT并将它们放入缓存层并让UI从缓存中读取它们.这些SELECT正在生成报告,并在Web上返回结果.

  2. 大多数业务逻辑都在SQL中.我们有一些LONG运行查询,用于执行处理逻辑的SELECT,INSERT,UPDATE和DELETE.最终结果实际上只是在处理完成后(大量游标)充满了INSERT,UPDATE和DELETE.我们的想法是平衡这两个服务器之间的负载.

我有一些问题:

  1. 这些用于双向事务复制的好用例吗?

  2. 我需要确保这个解决方案"正常工作"而不必担心冲突.在这个解决方案中会出现哪些冲突?我已经阅读了一些关于重置身份种子增量的文章,以防止冲突,这是有道理的,但它如何处理UPDATE/DELETE或其他可能发生冲突的地方?

  3. 我可能会遇到哪些其他问题,我们需要注意什么?

  4. 这个问题有更好的解决方案吗?

阶段2:将逻辑重写为.NET,它应该是,并优化SQL存储过程以仅执行基于集合的操作,因为它也应该如此.

这显然需要一段时间,这就是为什么我们想看看是否有一些初步步骤可以阻止用户遇到的痛苦.

谢谢.

sql-server replication sql-server-2008 database-replication transactional-replication

4
推荐指数
1
解决办法
2502
查看次数

使用protobuf-net的ASP.NET SessionState模式SQLServer序列化

问题背景

我一直在考虑优化SQL Server内会话的状态存储的方法,我遇到的几种方法是:

  • 在不需要会话的页面上禁用会话状态。另外,在未写入会话的页面上使用只读。
  • 在ASP.NET 4.0中,使用gzip压缩选项。
  • 尝试使会话中存储的数据量最少。
  • 等等

现在,我在会话中存储了一个对象(称为SessionObject的类)。好消息是,它是完全可序列化的。

使用protobuf-net进行优化

我认为另一种优化会话存储的好方法可能是使用协议缓冲区(protobuf-net)序列化/反序列化而不是标准BinaryFormatter。我知道我可以让所有对象继承ISerializable,但是我不想创建DTO或使用序列化/反序列化逻辑使我的Domain层混乱。

将protobuf-net与会话状态SQL Server模式一起使用的任何建议都很棒!

asp.net session session-state protocol-buffers protobuf-net

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

以编程方式测试代码:程序员还是其他人?

所以情况就是这样 - 我老板的一句话:"[...]我们需要专注于编程.[...]在一天结束的时候,我想编写好的软件而不是陷入测试困境".在我们有3个月的令人生畏的错误列表并且最近指定一名非程序员用Selenium框架编写Web测试之后,我们就说了这一点.

我的老板非常害怕单位测试(当他放慢开发人员的速度时,他看不到成本效益).您对Web测试和程序测试有何看法?它们应该由(或)程序员编写还是重要?我的想法是编写好的软件的一部分是编写测试?他是微软象牙塔式的人,所以微软(或一般的好文章)推出的任何资源都支持设计测试.

testing tdd selenium unit-testing web-testing

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