小编Mic*_*ers的帖子

过度工程的具体症状

我最近发现自己处理了一个(内部)应用程序,我已经写给我公司喜欢雇用的两个候选人,以协助维护和添加次要功能.

这是我写的第一个"生产"应用程序,它有45k LOC,我花了将近两年的"独奏"开发.我还很年轻(18岁),从头开始编写应用程序,同时签约作为离开公司的前开发人员的替身.我没有经验设计这种大小的应用程序,我试图使用常见的架构和设计模式.

今天我知道我已经做了一些严肃的过度工程,例如使用断开连接的变更跟踪架构而不是所选ORM已经实现的工作单元模式.我可能永远不会去"真正的"三层.

两位候选人都有10年以上的内部应用程序开发背景和相关平台.作为他们年龄的一半,没有经验,我尊重他们的意见.当我向他们解释应用程序架构时,评论是这样的:

  • Jeez,没有人会付钱给我这样的事情,我必须把事情做好
  • 坚持框架的功能,不要使用花哨的库/技术
  • 不要包装框架代码.在团队中,每个人都会编写自己的包装代码.
  • 你使用的是.NET 3.5吗?好吧,我们正在使用2.0.
  • LINQ的东西给我带来了什么?所有这些查询组合和投影看起来都太复杂了.

现在我问自己:
我是建筑宇航员吗?我怎么知道我在建筑方面走得太远了?过度工程的常见症状有哪些?

architecture infrastructure

44
推荐指数
11
解决办法
1万
查看次数

Java通用列表<List <?扩展数>>

为什么java中我们做不到:

List<List<? extends Number>> aList = new ArrayList<List<Number>>();
Run Code Online (Sandbox Code Playgroud)

即使这样也可以:

List<? extends Number> aList = new ArrayList<Number>();
Run Code Online (Sandbox Code Playgroud)

编译器错误消息是:

Type mismatch: cannot convert from ArrayList<List<Number>> to List<List<? extends Number>>

java generics

39
推荐指数
2
解决办法
2万
查看次数

使用私有静态方法

您如何看待使用私有静态方法

就个人而言,我更喜欢使用静态私有方法来进行非静态,只要它不需要访问任何实例字段.

但我听说这种做法违反了OOP原则.

编辑:我想从风格的角度来看,而不是表现.

java oop static-methods coding-style

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

C#中的属性

我知道C#(和.NET一般)在属性上很重要.然而,尽管我已用C#编程多年,但我还没有发现自己曾经使用它们.有人会让我开始使用它们,并解释哪些是最好的使用它们?

谢谢

.net c# attributes

36
推荐指数
2
解决办法
6200
查看次数

什么是Iterable接口用于?

我是初学者,我无法理解Iterable界面的真实效果.

java iterable

36
推荐指数
3
解决办法
4万
查看次数

在JFrame中设置背景图像

是否有任何方法可以将图像设置为背景JFrame

java swing background image jframe

36
推荐指数
3
解决办法
20万
查看次数

错误:无法打开类文件R.java

做了全新的Eclipse,JDK和android-sdk安装.

我目前在创建新项目时收到此错误

[2010-09-26 16:07:56 - 测试]错误:无法打开类文件C:\ workspace\Test\gen\com\example\test\R.java:没有这样的文件或目录

这是什么原因,我该如何解决?

Eclipse Helios 32 bit
java version "1.6.0_21"
Android sdk API 8
Run Code Online (Sandbox Code Playgroud)

PS我是Android开发的新手.

编辑:我尝试了大多数解决方案,但没有任何效果.所以我开始使用我朋友安装的Eclipse Ganymede.

java eclipse android r.java-file

36
推荐指数
4
解决办法
4万
查看次数

从列表中查找存在于另一个列表中的项目

我有一个 List<PropA>

PropA  
{  
    int a;  
    int b;  
}
Run Code Online (Sandbox Code Playgroud)

和另一个 List<PropX>

PropX  
{  
    int a;  
    int b;  
}
Run Code Online (Sandbox Code Playgroud)

现在我必须使用lambda或LINQ 找到匹配b属性中List<PropX>存在的项目.List<PropA>

c# linq collections lambda

36
推荐指数
4
解决办法
8万
查看次数

为什么接口首选抽象类?

我最近参加了一次采访,他们问我"为什么接口比抽象类更受欢迎?"

我尝试给出一些答案,如:

  • 我们只能获得一个Extends功能
  • 他们是100%抽象
  • 实施不是硬编码的

他们让我带走你使用的任何JDBC api."为什么他们是接口?".

我可以为此得到更好的答案吗?

java oop abstraction interface

35
推荐指数
7
解决办法
1万
查看次数

操作员新的重载和对齐

我正在超载operator new,但我最近遇到了对齐的问题.基本上,我有一个类IBase,提供operator newdelete所有必要的变种.所有类都派生自IBase并因此也使用自定义分配器.

我现在面临的问题是我有一个孩子Foo必须是16字节对齐,而所有其他孩子在对齐到8字节时都很好.然而,我的内存分配器只在默认情况下与8字节边界对齐,所以现在代码IBase::operator new返回一个不可用的内存块.这应该如何正确解决?

我可以简单地强制所有分配为16个字节,这将正常工作,直到弹出一个32字节对齐的类型.弄清楚里面的对齐operator new似乎并不是微不足道的(我可以在那里进行虚函数调用以获得实际的对齐吗?)推荐的处理方法是什么?

我知道malloc应该返回一块适合所有内容的内存,不幸的是,这个"所有内容"不包含SSE类型,我真的很想让这个工作无需用户记住哪种类型有哪个对齐.

c++ operator-overloading new-operator

34
推荐指数
2
解决办法
7025
查看次数