软件工程

针对在系统开发生命周期中工作的专业人士,学者和学生的问答






7
您如何用C#或类似Java的语言编码代数数据类型?
代数数据类型很容易解决一些问题,例如,列表类型可以非常简洁地表示为: data ConsList a = Empty | ConsCell a (ConsList a) consmap f Empty = Empty consmap f (ConsCell a b) = ConsCell (f a) (consmap f b) l = ConsCell 1 (ConsCell 2 (ConsCell 3 Empty)) consmap (+1) l 这个特定的例子在Haskell中,但是在其他语言中,本机支持代数数据类型,这将是相似的。 事实证明,有一个明显的面向对象样式子类型的映射:数据类型成为抽象基类,每个数据构造函数都成为具体的子类。这是Scala中的示例: sealed abstract class ConsList[+T] { def map[U](f: T …

3
DRY,KISS,SOLID等被分类为什么?
DRY是设计模式,方法论还是介于两者之间?他们没有可以证明的具体实现(即使您可以轻松地演示一个案例,而无需使用诸如KISS之类的东西……请参见The Daily WTF以获得大量示例),它们也无法像方法论一样完整地解释开发过程通常会。这些“经验法则”在哪里留下来?

3
“字符串”的词源
因此很明显,一串东西是一系列的东西,因此是一系列字符/字节/等。也可以称为字符串。但是谁首先把它们叫做弦?什么时候?并且在什么情况下它停留在周围?我一直想知道这一点。

4
在特殊情况下,我们可以接受重复的代码吗?
我正在一个软件项目中,我们必须构建三个API。一个用于家庭银行业务渠道,一个用于代理渠道,第三个用于移动渠道。 代理API是最完整的API,因为它具有所有功能。然后是更小的Home API,然后是移动API。 此处的架构师建立了一个公共层(所有API共享的跨通道EJB服务)。但是那时的API是不同的。 目前,这些API之间没有太大的区别。大型团队从代理商渠道开始,现在我们正在对其进行调整以适合家庭渠道。我们只是在为我们的家庭应用专门添加对象。否则,API之间的代码相似度为95%。这些API建立在Spring MVC之上,并且具有(控制器,模型和一些实用程序)。 基本上,控制器正在将BO映射到ChannelObject(在我看来,这样做不合适的地方),以及一些额外的实用程序和序列化程序。目前所有重复项。他们说重复的原因是他们希望API独立。“如果明天我们想要的家庭行为不同于代理商或移动设备,我们将不会挣扎!” 是否存在我们应该接受重复代码的情况?
57 java  api  spring 

8
如果项目中没有设计人员,开发人员是否应该进行UI原型设计?
我正在与一个创建专有Web应用程序的小团队一起工作,而UX并不是一个优先事项,因为我们自己的人将是操作它的人,但是我们确实努力使他们的工作更轻松。 作为开发人员,我是否应该在开始创建新屏幕之前创建UI样机?没什么特别的,主要是为了与同事讨论并拥有参考模型的总体布局。在盲目的研究代码之前,我将它与创建一些UML图进行了比较。 我的一位同事说这很荒谬,不是我的工作。


9
可读性与可维护性,编写嵌套函数调用的特殊情况
我的嵌套函数调用的编码样式如下: var result_h1 = H1(b1); var result_h2 = H2(b2); var result_g1 = G1(result_h1, result_h2); var result_g2 = G2(c1); var a = F(result_g1, result_g2); 我最近转到了一个部门,该部门非常使用以下编码样式: var a = F(G1(H1(b1), H2(b2)), G2(c1)); 我的编码方式的结果是,在功能崩溃的情况下,Visual Studio可以打开相应的转储并指出发生问题的行(我特别担心访问冲突)。 我担心,如果因第一种方式编程的相同问题而导致崩溃,我将无法知道是哪个函数导致了崩溃。 另一方面,行上进行的处理越多,一页上得到的逻辑就越多,从而增强了可读性。 我的恐惧是正确的还是我缺少什么?总的来说,在商业环境中这是首选吗?可读性还是可维护性? 我不知道它是否相关,但是我们正在使用C ++(STL)/ C#。


16
我应如何在变量中存储“未知”和“缺失”值,同时仍保留“未知”和“缺失”之间的差异?
将此视为“学术”问题。我一直想知道不时避免使用NULL,这是我无法提出令人满意的解决方案的一个示例。 假设我将测量值​​存储在有时无法测量(或丢失)的地方。我想将“空”值存储在变量中,同时避免使用NULL。其他时候,该值可能是未知的。因此,有了特定时间范围内的测量值,有关该时间段内测量值的查询可能会返回3种响应: 当时的实际测量值(例如,包括在内的任何数值0) “缺失” /“空”值(即已完成测量,并且已知该点为空)。 未知值(即,此时未进行任何测量。它可以为空,但也可以为任何其他值)。 重要说明: 假设您有一个get_measurement()返回“空”,“未知”和类型为“整数”的值的函数。具有数值意味着可以对返回值执行某些运算(乘法,除法...),但是如果对这些运算符使用NULL,则如果不捕获它们,则会使应用程序崩溃。 我希望能够编写代码,例如避免使用NULL检查(伪代码): >>> value = get_measurement() # returns `2` >>> print(value * 2) 4 >>> value = get_measurement() # returns `Empty()` >>> print(value * 2) Empty() >>> value = get_measurement() # returns `Unknown()` >>> print(value * 2) Unknown() 请注意,所有print语句均未引起异常(因为未使用NULL)。因此,空值和未知值将根据需要传播,并且可以将值实际上是“未知”还是“空”的检查推迟到真正需要之前(例如在某个地方存储/序列化值)。 旁注:我想避免使用NULL的原因主要是脑筋急转弯。如果我想完成工作,我不反对使用NULL,但是我发现避免使用NULL可以使代码在某些情况下更加健壮。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.