软件工程

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

4
有不必要的参考和使用会有什么后果?
我有些怪异,并且倾向于通过清除using每个类中的引用和s 来保留我的项目,以仅保留实际使用的内容。 我还能提出什么其他论据(除了使我的OCD平静下来)保持基本要领?我主要在考虑系统参考,对自定义工作的任何参考都会带来很多向后兼容性的问题。发行版占用空间更大吗?编译时间更长?
12 c# 

3
实体框架和层分离
我正在尝试与Entity Framework一起工作,但遇到了有关层分离的问题。 我通常使用UI-> BLL-> DAL方法,我想知道如何在这里使用EF。 我的DAL通常是这样的 GetPerson(id) { // some sql return new Person(...) } BLL: GetPerson(id) { Return personDL.GetPerson(id) } 用户界面: Person p = personBL.GetPerson(id) 现在的问题是:由于EF创建了我的模型和DAL,将EF包装在我自己的DAL中是一个好主意还是只是浪费时间? 如果不需要包装EF,我仍然可以将Model.esmx放置在其自己的类库中,还是将其放置在BLL中并在其中工作是可以的吗? 我真的看不出将EF包装在我自己的DAL中的原因,但是我想知道其他人在做什么。 因此,除了上述内容之外,我将省略DAL并执行以下操作: BLL: GetPerson(id) { using (TestEntities context = new TestEntities()) { var result = from p in context.Persons.Where(p => p.Id = …

5
什么是“问题域”
我必须为一个学校项目记录我的程序,并且我们有一个称为“问题域”的部分,但是我不知道在本部分中讨论什么。 所以问题是:在问题领域应该讨论什么?

3
Android,OpenGL和扩展GLSurfaceView?
这个问题既是技术性的,又是元的,是主观的,而且非常具体: 我是从事Android的独立游戏开发者,在过去的6个月中,我一直在苦苦挣扎,最终成功制作了自己的Android 3D游戏应用程序。所以我想我会跳出来,并帮助其他在android和openGL-ES上苦苦挣扎的人 但是,绝大多数问题与扩展有关GLSurfaceView。我没有扩展就制作了整个应用程序GLSurfaceView(并且运行良好)。GLSurfaceView对于我遇到的大多数问题,我完全看不出有任何理由要扩大。 更糟糕的是,Android文档暗示您应该这样做,但没有详细说明为什么/什么优点/缺点与不扩展以及通过GLSurfaceView.Renderer像我一样实现自己的事情来做所有事情 尽管如此,纯粹与扩展有关的大量问题仍GLSurfaceView使我怀疑,实际上是否有这样做的真正理由与我一直以来所做的方式一样(并在对他人的回答中提出建议)去做)。 那么,有什么我想念的吗?在此期间,我应该停止回答问题吗? Android openGL文档
12 android  opengl 

5
编程语言的语法是否取决于其实现?
虽然,我的问题可能完全无关紧要,但是我已经感觉到大多数编程语言与其官方实现之间存在一种模式。 诸如Python,Lua等之类的解释(字节解释?)语言通常具有极其宽松和容易的语法,并且通常没有类型,或者不需要开发人员在源代码中显式地编写变量类型。 诸如C,C ++,Pascal等的编译语言通常具有严格的语法,通常具有类型,并且通常需要更多的代码/开发时间 像Java / C#这样的官方实现采用JIT编译的语言通常是上述两种语言之间的独特折衷,同时兼具两者的某些最佳功能。 某些更现代的已编译编程语言(例如D和Vala,以及Java的GNU GJC实现)可能是该规则的例外,并且类似于Java和C#等JIT编译语言的语法和功能。 我的第一个问题是,这真的相关吗?或者这仅仅是大多数解释语言具有简单语法的巧合,而JIT编译语言具有适度的语法和功能等。 其次,如果这不是巧合,那为什么呢?举例来说,如果您正在对JIT进行编译,则某些功能只能用编程语言来实现吗?

3
命令/查询分隔是否适用于创建对象并返回其ID的方法?
假设我们有一个调用业务流程的服务。此过程将在数据层上调用以在数据库中创建类型为A的对象。 之后,我们需要再次调用数据层的另一个类以在数据库中创建类型B的实例。我们需要传递有关外键A的一些信息。 在第一种方法中,我们创建一个对象(修改状态)并在单个方法中返回其ID(查询)。 在第二种方法中,我们有两种方法,一种是保存的(createA),另一种是查询的(getId)。 public void FirstMethod(Info info) { var id = firstRepository.createA(info); secondRepository.createB(id); } public void SecondMethod(Info info) { firstRepository.createA(info); var key = firstRepository.getID(info); secondRepository.createB(key); } 据我了解,第二种方法更完全遵循命令查询分离。但是我发现查询数据库来获取我们刚刚创建的对象既浪费又违反直觉。 您如何在这种情况下调和CQS? 是否仅第二种方法遵循CQS,如果可以,在这种情况下是否更可取?

4
C#中哈希表和字典的实际大小限制
C#4词典或哈希表可以包含的项目数量的实际限制是多少,这些结构可以合理包含的字节总数。我将处理大量对象,并想知道这些结构何时开始遇到问题。 对于上下文,我将使用具有大量内存的64位系统。另外,我将需要使用某种形式或“键”来查找对象。鉴于性能需求,这些对象将需要驻留在内存中,并且许多对象将长期存在。 尽管我需要避免使用第三方或开放源代码库,但还是可以建议其他方法/模式。出于规范原因,我需要能够使用本机C#(或C ++ \ CLI)来构建它。

2
Dijkstra的算法是否适合解决此信号路由问题?
我正在开发用于集成视听系统的信号管理和路由模块,并且正在设计该模块,以便在不同的信号分配网络中尽可能地灵活。该模块的目的是处理跨多个堆叠矩阵切换器1的路由并处理必要的格式转换。 在这一点上,我探索的最好的解决方案是将网络映射到一个图形,该图形具有针对切换器支持的每种信号类型的离散顶点,然后通过代表处理格式转换的视频处理器的节点进行连接。 颜色代表信号格式。 圆形节点是切换台,源或宿。 正方形节点是执行格式转换的视频处理器。 从那里,我可以使用Dijkstra算法的实现来识别为使输入X到输出Y所必须形成的路径。这应该允许有关所有切换器和处理器的输入/输出配置的数据传入并相应地调整模块。 这是一个适当的解决方案,还是值得研究的替代方法? 1个又名“纵横开关”,是具有M输入x N输出的视频路由器,支持一对多连接。每个物理设备可以处理多种信号格式,并且可能执行或可能不执行任何格式转换。 编辑:正如PéterTörök所提到的,图形不一定是一棵树,该图是一个简单的例子来说明这个想法。在“现实世界”中实现时,可能会存在多个路径,这些路径可提供不同级别的清晰度(DVI> VGA>组件>复合),而我打算用边缘加权来表示。 编辑2:这是一个稍微全面的示例,其中指示了方向性,并显示了由两种信号类型组成的网络。最初的示例已稍作修改,因此设备上的每个输入和输出都定义为离散节点,因为这将提供控制矩阵路由/输入选择所需的数据。

2
适用于大型项目的Python
是否有任何资源可以构建大型的具有工业实力的Python项目?我想开始一个雄心勃勃的个人项目,但是我不太确定如何设计它,以及采取什么措施使该项目成功。 是否有任何资源讨论如何使大型Python项目正常工作?
12 python 

3
持续集成和DVCS模式
我们目前使用Subversion和TeamCity,我们将转向使用Mercurial(特别是Kiln,因为我们是FogBugz用户)。 显然,这将导致我们的开发模式(我们两个人!)发生变化-希望有所改善-但我正在努力解决的一个问题是如何构建事物,以便我们仍然享受持续集成/我们的CI服务器的好处(已经存在并且将继续保持收益是给定的,对此问题的讨论不在此问题的范围之内。 借助SVN,我们致力于使用数量有限的中央存储库-每个项目实际上一个中央存储库(或多或少的一个Visual Studio解决方案),因此可以轻松触发构建并确保所有文件都已提交且没有任何内容但是,如果我们要充分利用Mercurial,我们将希望拥有更多的存储库实例,我希望这些更改通常会流向确定的“实时”存储库。我苦苦挣扎的问题是,对于我来说,实时回购似乎太“迟到”,无法触发我的CI构建OTOH每个开发人员每个项目一个CI构建可能会过多(并导致其他问题)。 我在钓鱼,但是那是因为中央颠覆仓库提供的一件事(我,在我们的设置下!)非常清楚什么时候建造。 nb我不是在问将Mercurial与持续集成结合使用的机制-我想为个人项目,模式和结构以及工作实践/工作流程做些准备,以求达到目标。

3
为什么我们要删除全局对象的某些内置属性?
我最近正在阅读es5,发现在全局对象的某些内置属性中的[[configurable]]属性设置为true,这意味着我们可以删除这些属性。 例如: Array.prototype对象的join方法具有属性 {[[Writable]]:true, [[Enumerable]]: false, [[Configurable]]: true} 因此,我们可以轻松删除Array的join方法,例如: delete Array.prototype.join; alert([1,2,3].join); 警报将显示 undefined在我的铬17,Firefox 9(即10,甚至ie6)中; 在Chrome 15和safari 5.1.1中,[[configurable]]属性设置为true,删除结果也为true,但最终结果仍为 function(){[native code]}。似乎这是一个错误,而铬修复了它。 我以前没注意到。我认为删除用户代码中的内置函数很危险,并且在与其他人一起工作时会带来很多错误。那么为什么ECMAScript会做出这个决定?
12 javascript 

2
初学者,中级和高级Rails开发人员应该能够完成哪些任务?
我已经对ROR进行了大约一年的编程,并且我认为我已经准备好开始为其他人开发项目。问题在于承包商的职位发布并不能真正告诉您在不同的经验水平(铁路和其他技术)下您应该能够完成哪些具体任务,因此我不知道该向何处推销自己。我认为我介于中级和中级之间,但是谁知道呢?所以我的问题是: 初级程序员应以每小时35美元的价格完成哪些实际任务,中级程序员应以每小时75美元的价格完成哪些实际任务,高级程序员应以每小时75美元的价格完成哪些实际任务,哦,说每小时$ 140吗? 一个或两个例子就足够了。

4
避免肿的域对象
我们正在尝试使用DDD方法将数据从庞大的Service层移至Domain层。当前,我们的服务中有很多业务逻辑,这些业务逻辑遍布各地,并且无法从继承中受益。 我们有一个中心的Domain类,这是我们大多数工作的重点-Trade。贸易对象将知道如何定价,如何估计风险,验证自身等。然后,我们可以用多态性替换条件。例如:SimpleTrade将以一种方式定价,而ComplexTrade将以另一种定价。 但是,我们担心这会使贸易类膨胀。它确实应该负责自己的处理,但是随着添加更多功能,类的大小将成倍增加。 所以我们有选择: 将处理逻辑放在贸易类中。现在,根据交易类型,处理逻辑是多态的,但是交易类别现在具有多种责任(定价,风险等)并且规模很大 将处理逻辑放入其他类,例如TradePricingService。Trade继承树不再具有多态性,而是类更小并且更易于测试。 建议的方法是什么?

9
在您的公司中使用开源程序?
使您的员工在公司中使用开源程序是否有任何弊端? 我打算开始忙碌,我想知道为什么公司通常使用专有软件,例如Microsoft Word引用最著名的软件。他们为什么不使用Open Office(或Libre Office)等? 从我的角度来看,您可以节省很多钱,并通过例如以捐赠的形式给他们部分收益来帮助开源社区。 我不知道有任何一家(中大型)公司这样做。也许你可以给我一些例子,只是为了证明开放源代码的使用/合作的这种模式运作的岩石。

5
实现Conway的《人生游戏》的功能编程方式是什么?
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 4年前关闭。 我最近实施的乐趣Conway的生命游戏在Javascript(实际上CoffeeScript的,但同样的事情)。由于javascript可以用作功能性语言,因此我一直试图保持这种状态。我对结果不满意。我是一个相当不错的面向对象程序员,而我的解决方案充满了同样的古老。这么长的问题很简短:这样做的(伪代码)功能样式是什么? 这是我的尝试的伪代码: class Node update: (board) -> get number_of_alive_neighbors from board get this_is_alive from board if this_is_alive and number_of_alive_neighbors < 2 then die if this_is_alive and number_of_alive_neighbors > 3 then die if not this_is_alive and number_of_alive_neighbors == 3 then alive class NodeLocations at: (x, y) -> return …

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.