我正在阅读Dino Esposito关于如何在ASP.NET MVC中测试AsyncConrollers的文章,在那里他使用了"Humble Object"模式,而没有详细介绍.
谷歌周围也没有运气.
那么,Humble Object模式是什么?什么时候有用?
让我们假设我们想构建一个类似于eBay的应用程序,其中我们有一个名为Customer
的实体和一个名为的实体Order
.
从关系角度来看,我将其建模为:
Customer
+----+-----+
| ID | ... |
+----+-----+
Order
+----+-------------+-----+
| ID | CUSTOMER_ID | ... |
+----+-------------+-----+
Run Code Online (Sandbox Code Playgroud)
现在,当我想将其映射到JPA时,我有多种选择:
创建从Order到Customer的单向多对一关联.恕我直言,这是最接近关系模型.缺点是,为了找到给定客户的所有订单,我必须编写JPQL查询,因为客户对其订单一无所知.此外,我不能以OO自然的方式为客户添加新订单(例如customer.addOrder(aNewOrder);
).
创建从客户到订单的一对多关联.这样,为了找到我可以使用的给定客户的所有订单,我可以customer.getOders()
以OO自然方式为客户添加新订单.缺点是,为了找出已下达给定订单的客户,我应该使用JPQL.
创建从客户到订单的双向一对多关联.这样我就不需要编写任何JPQL查询来检索客户或已下达给定订单的客户的所有订单.缺点是增加了维护双向关联的复杂性.
因此,我没有看到关于是否必须使用单向关联或双向关联是否"正确"的明确论据.换句话说,在我看来,这一切都归结为个人偏好和模特的设计者/实施者的品味.
我是对的还是有规则可以确定给定关联的正确方向性?
我使用的是Spring 3.2,Hibernate和JUnit 4.
我的Dao课程如下:
@Transactional public class SomeDaoImpl implements SomeDao {
如果直接从Web应用程序执行,则对此工作进行更新操作.但是,我发现执行更新方法的junit集成测试实际上并不会保留更改.在执行junit方法时,事务是否会滚动事务?
Eclipse有一个非常棒的查找/替换系统,支持正则表达式.我发现我经常使用很多相同的正则表达式查找/替换.Eclipse查找/替换对话框确实将最后几个查找命令存储在组合框中,但是大于8的任何查找都会被推出.此外,它不会将查找和替换命令一起存储为一个设置,它只是将最近使用的命令存储在一起.
Eclipse中是否有任何方法(或者可能是Eclipse的插件)将查找/替换命令与其他设置一起存储(即区分大小写等)
我在"程序"文件夹中有大量单独的,不相关的Java程序,我真的希望能够为每个程序自动计算技术债务分数.我知道SonarQube可以让你用Sonar-Runner做这个(有点) ,但是我真的想要一种动态的方法,所以我可以让脚本分析并编写所有程序中的技术债务分数.程序"文件夹到csv.
如果它可以为我做这件事,我非常愿意并且乐于尝试任何其他类型的技术债务软件(或质量).我真的很感激任何输入,或者想一想这是否可能?
适配器设计模式用于将类(Target)的接口转换为客户期望的另一个接口(Adaptee).适配器允许不兼容的类一起工作,否则由于它们的不兼容接口而无法工作.
适配器模式可以通过两种方式实现:继承(适配器模式的类版本)和组合(适配器模式的对象版本).
我的问题是关于使用继承实现的适配器模式的类版本.
以下是绘图编辑器的示例:
interface Shape
{
Rectangle BoundingBox();
Manipulator CreateManipulator();
}
class TextView
{
public TextView() { }
public Point GetOrigin() { }
public int GetWidth() { }
public int GetHeight() { }
}
interface Shape
{
Rectangle BoundingBox();
Manipulator CreateManipulator();
}
class TextView
{
public TextView() { }
public Point GetOrigin() { }
public int GetWidth() { }
public int GetHeight() { }
}
Run Code Online (Sandbox Code Playgroud)
我们想重用TextView类来实现TextShape,但是接口是不同的,因此,TextView和Shape对象不能互换使用.
是否应该更改TextView类以符合形状界面?也许不是.
TextShape可以通过以下两种方式之一使TextView接口适应形状的界面:
类适配器
interface Shape
{
Rectangle BoundingBox();
Manipulator …
Run Code Online (Sandbox Code Playgroud) design-patterns liskov-substitution-principle adapter solid-principles
必须是一个"四人帮"策略的类是完全无状态的(即没有字段)还是它可以包含不可变状态(即最终字段)?
服务接口:
public List<UserAccount> getUserAccounts();
public List<UserAccount> getUserAccounts(ResultsetOptions resultsetOptions, List<SortOption> sortOptions);
Run Code Online (Sandbox Code Playgroud)
服务实施:
public List<UserAccount> getUserAccounts() {
return getUserAccounts(null, null);
}
public List<UserAccount> getUserAccounts(ResultsetOptions resultsetOptions, List<SortOption> sortOptions) {
return getUserAccountDAO().getUserAccounts(resultsetOptions, sortOptions);
}
Run Code Online (Sandbox Code Playgroud)
如何使用easymock或任何其他可行的测试方法对此进行测试?示例代码将不胜感激.对于简单的模拟传递对象作为参数非常混乱.有人清楚地解释了测试服务层的最佳方法是什么?测试服务接口会被视为单元测试还是集成测试?
有没有经过验证的方法来验证junit测试或集成测试的质量?
您的业务分析师应该检查单元测试cerfity吗?或者还有其他方法吗?在传统的代码优先环境中,同行或领导会审查测试计划,但自动化测试如何?
我查看了这个stackflow线程,但无法提取任何有意义的东西.
思考?
eclipse ×2
hibernate ×2
junit ×2
.net ×1
adapter ×1
c# ×1
design-debt ×1
easymock ×1
jpa ×1
junit4 ×1
liskov-substitution-principle ×1
orm ×1
regex ×1
replace ×1
sonar-runner ×1
sonarqube ×1
spring ×1
spring-roo ×1
spring-test ×1
stateless ×1
unit-testing ×1