软件工程

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

4
为什么REST Api不遵循Facade设计模式
在将REST [api]结构与OO模型进行比较时,我看到了这些相似之处: 都: 面向数据 REST =资源 OO =对象 围绕数据的环绕操作 REST =在资源周围环绕VERBS(获取,发布,...) OO =通过封装促进对象周围的操作 但是,例如,在尝试应用外观模式时,良好的OO实践并不总是站在REST api上:在REST中,您没有1个控制器来处理所有请求,并且您没有隐藏内部对象的复杂性。 相反,REST促进资源与资源之间的所有关系的发布以及至少以两种形式的其他关系: 通过资源层次关系(ID为43的联系人由地址453组成): /api/contacts/43/addresses/453 通过REST json响应中的链接: >> GET /api/contacts/43 << HTTP Response { id: 43, ... addresses: [{ id: 453, ... }], links: [{ favoriteAddress: { id: 453 } }] } 回到OO,外观设计模式考虑了objectA及其“ objectB客户 ” Low Coupling之间的a,以及此objectA及其内部对象组成(objectC,objectD)。随着对象A接口,这允许开发者在极限冲击对象B的对象A的内部变化(objectC和objectD),只要对象A …
9 http  rest  definition 

1
关系代数/演算证明可以用于测试/验证SQL吗?
使用证明形式的关系代数和/或关系演算来测试/验证SQL语句,函数和存储过程的正确性,是否可行甚至可能? 在我看来,至少应该有这种可能,但是我不知道是否缺少细节,使证明与代码之间的1:1映射不正确。 你们有没有尝试过这样的方法?奏效了吗?您的经历如何?

1
通过LLVM从C ++应用程序移植到Java是否可行
使用LLVM(我猜是LLJVM)将C ++应用程序移植到Java字节码的可行性如何? 事实是,我们目前有一个用C ++编写的过程,但是新的客户端已经强制要求能够使用显然没有任何本地代码(没有JNI)的Java虚拟机以多平台方式运行该程序。这个想法是要能够将生成的jar并复制然后复制到不同的系统(Linux,Win,32位-64位),它应该可以正常工作。 环顾四周似乎可以将C ++编译为LLVM IR代码,然后将该代码编译为Java字节码。不需要所生成的代码是可读的。 我已经使用emscripten对类似的东西进行了一些测试,这需要C ++代码并将其编译为JavaScript。结果是有效的JS,但完全不可读(看起来像assambler)。 是否有人使用此技术将应用程序从C ++移植到Java字节码? 我们可能面对什么问题? 生产代码是否有效? 在发表一些评论后,为了更清楚地表明我的观点,也许端口没有被很好地使用,因此我不希望可读的源代码只是Java字节码,因此它不再是将要开发的“端口”,只是目标平台必须是Java JVM,而不是本机。 注意:我知道目前我们有一些非标准C ++和关闭源代码库,我们正在寻求删除此非标准代码和所有关闭源代码库,并使用Free Libre开源软件,因此,假设所有代码均为标准C ++代码,所有代码在编译时可用。 注意2:不能编写可移植的C ++代码然后将其编译到所需的目标平台,因为编译后的程序必须是多平台的,因此要使用JVM。 注意3:现在我们不在研究适用于Python或其他语言库的类似解决方案,但我也想听听它。我的意思是我们的目标可执行文件必须是java字节码,但是如果有一些选项可以将C ++编译为有效的python编译代码,我也想听听它们。
9 java  c++  porting 

3
如果我在线上获得帮助,是否可以将其正确地声明为我自己的项目?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 基本上,我是Python网络编程的新手,所以我在线上学习了教程。使用教程中讲授的内容(创建套接字,连接端口等),我修改了代码,以便编写了一个程序,两台计算机可以相互发送消息。 如果我要申请工作并将其展示给我的面试官,从技术上讲,该代码是否属于我?可以说,我没有那么多地修改代码。但是,例如,如果我将其修改为类似井字游戏的样子,该游戏中两个用户在不同的PC上相互玩耍,那么代码是我的吗?我只是不想看起来像a窃者,所以我为什么要问。

1
“不良苹果”算法或进程使共享沙箱崩溃
我正在寻找一种算法来处理以下问题,我暂时将其称为“坏苹果”算法。 问题 我有N个进程在M个沙箱中运行,其中N >>M。 为每个进程提供自己的沙箱是不切实际的。 这些进程中至少有一个进程表现不佳,并导致整个沙箱崩溃,从而杀死了同一沙箱中的所有其他进程。 如果这是一个行为不佳的进程,那么我可以使用简单的二等分将一半的进程放在一个沙箱中,再将一半的进程放在另一个沙箱中,直到发现错误为止。 问题 如果一个以上进程的行为不佳-包括它们都表现不佳的可能性-这种朴素的算法是否有效?是否可以保证在某些合理范围内工作? 简化版 为了争辩,让我们假设一个不好的过程会立即降低其沙箱,而一个好的过程则永远不会。

2
实际上,OpenJDK的维护如何工作?
具体来说,我想了解在错误修复和其他补丁方面Oracle JDK与OpenJDK之间的区别。 哪个分支首先得到修复,并且Oracle是否习惯于制作从未在OpenJDK中发布过的补丁?
9 java 

1
标题中的宏函数与静态函数
对于许多可以使用函数的快速任务f(x,y),在纯C中使用宏。我想具体询问这些情况,这些情况可以通过函数调用解决(即,用于内联函数的宏,而不是用于任意代码的代码扩展的宏)。 通常不内联C函数,因为它们可能是从其他C文件链接到的。但是,静态C函数仅在定义它们的C文件中可见。因此,编译器可以内联它们。我听说,应该将许多宏替换为静态函数,因为它们会生成更安全的代码。 在某些情况下这不是一个好主意吗? 再说一遍:根本不问具有完全无法表示为函数的具有##相似构造的Code-Production宏。
9 c 

3
处理node.js回调金字塔
我刚刚开始使用节点,并且我很快注意到的一件事是回调能够以多快的速度建立到一个愚蠢的缩进级别: doStuff(arg1, arg2, function(err, result) { doMoreStuff(arg3, arg4, function(err, result) { doEvenMoreStuff(arg5, arg6, function(err, result) { omgHowDidIGetHere(); }); }); }); 该负责人风格指南说,把每个回调在一个单独的功能,但似乎对使用封闭的过于严格,并使单个对象在顶级声明可用几层下来,对象必须通过所有的传递中间回调。 可以使用函数范围来帮助吗?将所有需要访问全局对象的回调函数放在声明该对象的函数中,以便将其放入闭包中? function topLevelFunction(globalishObject, callback) { function doMoreStuffImpl(err, result) { doMoreStuff(arg5, arg6, function(err, result) { callback(null, globalishObject); }); } doStuff(arg1, arg2, doMoreStuffImpl); } 等等更多的层... 还是有框架等可以帮助减少缩进级别而无需为每个回调都声明命名函数?您如何处理回调金字塔?

2
Windows上用于.NET的RSpec + Selenium测试
我是一个在Mac上使用RSpec,Capybara和Selenium Webdriver在Mac上进行TDD的Rails开发人员。现在,我的公司已要求我将这种方法用于Windows环境上的.NET。最好的方法是什么? 我可以只安装Ruby,然后使用RSPEC,Capybara和Selenium Webdriver进行集成测试。但是单元测试呢?我还查看了NSpec,但不确定是否可以将其与Capybara或Selenium结合使用以进行集成测试。 什么是这里的好方法?
9 .net 

2
REST还是多层异构系统中的消息队列?
我正在为三层系统设计REST API,例如:Client application-> Front-end API cloud server-> user's home API server (Home)。 Home是家用设备,应该Front-end通过Websocket或长时间轮询来保持连接(这是我们违反REST的第一个地方,以后还会更糟)。Front-end大多数情况下会将Client请求传送到Home连接并处理一些呼叫本身。有时会Home向发送通知Client。 Front-end并Home具有基本相同的API;Client可能是Home通过LAN直接连接。在这种情况下,Home需要Client在Front-end自身上注册一些操作。 该系统中REST的优点是: REST是人类可读的; REST具有明确定义的动词(如CRUD),名词和响应代码到协议对象的映射。 它可以通过HTTP运行并传递所有可能的代理。 REST的反对意见是: 我们不仅需要一种请求-响应通信方式,还需要一种发布-订阅方式。 HTTP错误代码可能不足以处理三层通信错误。Front-end可能返回202 Accepted异步调用只是为了发现必要的Home连接断开了,应该已经连接了503; Home需要向发送邮件Client。Client将必须进行轮询Front-end或维护连接。 我们正在考虑通过Websocket上的WAMP / 高速公路来获得发布/订阅功能,这让我惊讶的是它已经看起来像消息队列。 是否值得评估一种消息队列作为传输方式? 看起来像消息队列相反是: 我需要在消息级别上自己定义CRUD动词和错误代码。 我读到一些有关“较高的维护成本”的信息,但这意味着什么? 这些考虑有多严重?


1
数学需要了解Haskell类型系统背后的理论吗?
最近,我对Haskell产生了浓厚的兴趣。 在尝试学习新概念(例如,forall关键字和ST monad)和一般的Haskell的类型系统时,我不断地从类别理论和lambda演算中学习概念。所以,我想知道: 数学的其他哪些分支对于深入了解Haskell的类型系统也很重要? 我可以放弃对这些数学的严格研究,而是专注于某些相关概念吗?(例如,lambda演算中的量词。)如果是,那么哪些概念必不可少? 我希望很快能学到类型和编程语言,但是,请提出您认为合适的其他替代阅读资源。

2
Ruby on Rails保存图像的方式是什么?
我在iOS上进行开发,并且从PHP后端切换到Ruby on Rails。交换格式为JSON。 Google快速搜索“将图像保存在Rails中”后,几乎所有结果都涉及将图像数据作为blob保存到数据库。我可能会弄错了,但我的印象是,将图像数据保存在数据库中会浪费大量的时间和空间(与保存指向文件位置的链接相反('/img/subcat/4656.png') 。 在PHP中,接收数据,生成文件名,将该文件保存到磁盘以及使用映像在磁盘上的位置更新数据库是相当标准的。Ruby on Rails是否相同,还是我不知道某些内置的ActiveRecord图像功能?

3
在MVVM WPF中将实体框架数据库上下文(模型)连接到ViewModel的最佳方法是什么?
如上述问题:在MVVM(WPF)中将实体框架数据库模型(上下文)连接到viewModel的最佳方法是什么? 我正在WPF中学习MVVM模式,很多示例展示了如何将模型实现为viewModel,但是该示例中的模型只是简单的类,我想将MVVM与实体框架模型一起使用(基于基础的方法)。将模型连接到viewModel的最佳方法是什么? 感谢您的回答。 //ctor of ViewModel public ViewModel() { db = new PackageShipmentDBEntities(); // Entity Framework generated class ListaZBazy = new ObservableCollection<Pack>(db.Packs.Where(w => w.IsSent == false)); } 这是我通常的ViewModel指导,认为有更好的方法,我正在阅读存储库模式,不确定是否可以将其适应WPF MVVM

6
字段与方法参数
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 6年前关闭。 我刚开始写一些新的类,然后发现我添加了很多严格不需要的方法参数。这是为了避免在某些方法调用特定的类中具有状态,而不是成为类的常规配置或依赖性,这是一种习惯。 这样做意味着许多没有参数的方法最终只能得到一,二或三。 我想听听您对这个折衷方案的看法,以及如何决定在何种情况下采取哪种方法? 由于在描述代码时,代码通常比英语更容易理解,因此我创建了一个包含两个变体的小知识点:https : //gist.github.com/JeroenDeDauw/6525656

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.