我使用Struts 1.2.4继承了这个巨大的遗留Java Web应用程序.我有一个关于ActionForms的具体问题.其中一些只有String属性(即使是数字),其中一些使用看似合适的类型(整数,日期,字符串等).这里的最佳做法是什么?
此外,似乎如果属性是Integer类型,并且用户输入的值不是整数值,Struts会静默吞下它,并且不会设置该属性.怎么了?
情况就是这样:我的课程做得太多了.它主要用于访问配置信息,但它也具有数据库连接.它是作为一个单独实现的,所以这也使单元测试变得困难,因为大多数代码与它紧密耦合.这甚至更成问题,因为它创建了一个导入时间依赖项(我们在Python中这样做),这意味着某些模块必须按特定顺序导入.理想情况下,我想将它分成两个类,并使其成为非单例.
幸运的是,我的雇主已经热心这样一个事实,即这种测试是好的,如果它使代码更容易测试,我愿意允许我做这样的改变.但是,我怀疑他们是否愿意让我花太多时间在上面.而且我宁愿逐步修复它,而不是试图过于激进.
所以,我在这里看到三个选择:
那我该怎么办?
是顺序耦合真的代码是一件坏事?
虽然它是一个反模式,但我看到的唯一风险是以错误的顺序调用方法,但是具有这种反模式的API /类库的文档应该照顾它.代码还有哪些其他问题是连续的?此外,这种模式很容易通过使用外观来修复.
谢谢
有人一直在谈论Enums一般违反清洁守则原则,所以我正在寻找人们最喜欢的Enum反模式和替代解决方案.
例如,我见过这样的代码:
switch(enumValue) {
case myEnum.Value1:
// ...
break;
case myEnum.Value2:
// ...
break;
}
Run Code Online (Sandbox Code Playgroud)
它比带有魔术字符串的switch语句更好一步,但这可能已经通过工厂,容器或其他模式更好地解决了.
甚至像这样的老派代码:
if(enumValue == myEnum.Value1) {
// ...
} else if (enumValue == myEnum.Value2) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
您对枚举有哪些其他反模式和更好的实现?
我一直在读"SQL反模式:避免数据库编程的陷阱"一书,特别是围绕魔豆反模式.其中显示了使用域模型解耦activerecords的图表,并且在PHP中有示例,但不是Rails,它将此称为域模型和视图/控制器之间的HAS-A聚合以及域模型和activerecords之间的HAS-A组合(I假设这是UML说话).
在Rails中,通过使用模型方法来制作瘦控制器胖模型似乎很常见,这些方法可能会操纵其他相关模型,因此在任何给定的控制器中只能使用一个模型.但是,我想知道是否有一种练习包括Rails中的完全解耦?
也就是说,创建一个无表格模型或其他类作为域模型,充当控制器和activerecord对象之间的层(反过来又映射到表),这样控制器可以更好地隔离,不需要知道任何东西关于底层数据库及其结构.它还提供了远离CRUD方法的选项,这些方法无法解释它们适用的应用程序要求,这是书中的另一个批评.
activerecord domain-driven-design anti-patterns ruby-on-rails domain-model
我试图了解什么是 Poltergeist 反模式,以及它与 Command 或 Delegate 模式有何不同。我读了:
http://en.wikipedia.org/wiki/Poltergeist_(computer_science) http://sourcemaking.com/antipatterns/poltergeists
但是没看懂区别...
所以为了清楚起见,我想看看它的代码示例(我更喜欢 C# 或 Java 语言)。
有人有吗?
我在StackOverflow上看到了人们建议为AngularJS服务提供回调函数的答案.
app.controller('tokenCtrl', function($scope, tokenService) {
tokenService.getTokens(function callbackFn(tokens) {
$scope.tokens = tokens;
});
});
app.factory('tokenService', function($http) {
var getTokens = function(callbackFn) {
$http.get('/api/tokens').then (function onFulfilled(response) {
callbackFn(response.data);
});
};
return {
getTokens: getTokens
};
});
Run Code Online (Sandbox Code Playgroud)
在我看来,这似乎是一种反模式.该$http服务返回的承诺和具有.then方法执行回调函数感觉就像控制的不健康的反转.
如何重新编写这样的代码,以及如何解释为什么原始方式不是一个好主意?
Java 8 在接口上引入了默认方法,为集合接口的实现提供向后兼容性,以避免遗留库上出现 MethodNotFound 错误。
即具有List 的java 7 实现的库将不会实现stream() 方法。如果 java 8 代码使用此库,则默认实现会提供后备方案。
我在实践中看到的是,许多开发人员过度热衷于使用此功能以类似于 scala 特征的风格来模拟混合和多重继承。
我担心的一个问题是,这种编程风格模糊了接口(即契约)及其实现之间的界限,因此引入了隐藏的紧密耦合并违反了控制反转,迫使我使用后门通过覆盖默认实现来测试代码。我的单元测试,以抑制不应出现在单元测试级别的行为。
使用默认方法是一种反模式,还是只有我一个人怀疑这一点?
anti-patterns inversion-of-control mixins java-8 default-method
我使用Struts 1.2.4继承了这个巨大的遗留Java Web应用程序.我有一个关于行动的具体问题.大多数页面只有一个Action,而processExecute()方法是可怕的怪物(非常长且基于请求参数的嵌套if语句很多).
鉴于Actions是命令模式的一个实现,我正在考虑将这些Actions拆分为每个用户手势一个Action.这将是一个很大的重构,我想知道:
我正在开发一个带有数据库后端的10页网站.有500多个对象在使用,试图在ASP.Net中实现MVP模式.我是从一个单页的跟踪代码执行,我的手指已经在F-11在Visual Studio中约40分钟,似乎没有尽头,可能1000+方法需要一个网页!如果这只是50个对象,这将是一两件事,但是,通过所有这些对象就像数以百万计的蚂蚁在他们的巨大土丘房子疯狂回环,与对象隧道百出的代码执行蛇. 因此,一种新的反模式诞生了:AntFarm.
AntFarm也被称为"OO-Madnes","OO-Fever",OO-ADD,或简称为设计模式的瘾君子.
这不是我第一次看到这个,也不是我在其他公司的同事.似乎这种风格正在积极传播,或者无论如何是对众多OO/DP福音书的误解......
我想介绍的反模式反模式:GST或"完成各项工作"又名"获得嘘**做" AKA GRD(GetRDone).这种模式只关注它所说的内容,以简单的方式完成工作.我可能会在稍后的帖子中尝试更多地概述它,或者请在这种解药模式上分享您的想法.
不管怎么说,我在AntFarm反模式的一个很好的例子之中,因为我写的(作为奖金,有没有文件或意见).请分享你对这个反模式是如何变得如此prevelant,我们怎样才能避免它的想法,怎么能够撤消或在现场系统中的一个必须努力应对这种模式!
anti-patterns ×10
oop ×3
java ×2
struts ×2
.net ×1
activerecord ×1
angularjs ×1
asp.net ×1
c# ×1
domain-model ×1
enums ×1
god-object ×1
java-8 ×1
javascript ×1
mixins ×1
singleton ×1