软件工程

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

4
我是否应该对常数全部使用大写?
我是一名Python程序员,主要使用pylint整理源代码。我可以消除除以下警告以外的所有警告:常量名称无效。将名称更改为全部大写可以解决此问题,但是我真的应该这样做吗?如果这样做,我发现我的代码看起来很丑陋,因为大多数变量都是常量(根据pylint)。

5
微服务和存储过程
在微服务体系结构中,存储过程是否被视为不良做法? 这是我的想法: 大多数有关微服务的书籍建议每个微服务使用一个数据库。存储过程通常在整体数据库上工作。 再次,大多数微服务架构书籍都指出,它们应该是自治的且松散耦合的。使用专门在Oracle中编写的存储过程,可以将微服务与该技术紧密结合。 大多数微服务架构书籍(我已经阅读过)都建议微服务应面向业务(使用域驱动设计(DDD)设计)。通过将业务逻辑转移到数据库中的存储过程中,情况已不再如此。 有什么想法吗?



4
字节流实际上是什么?
谁能解释我实际上包含什么字节流?它仅包含字节(十六进制数据)或二进制数据还是英文字母?我对“原始数据”一词也感到困惑。如果有人要求我“反转4字节数据”,那么我应该假设数据是十六进制代码还是二进制代码?

12
将通用对象存储在容器中然后从容器中获取对象并向下转换对象是否有代码味道?
例如,我有一个游戏,其中有一些工具可以提高玩家的能力: Tool.h class Tool{ public: std::string name; }; 和一些工具: 剑 class Sword : public Tool{ public: Sword(){ this->name="Sword"; } int attack; }; 盾 class Shield : public Tool{ public: Shield(){ this->name="Shield"; } int defense; }; 魔术衣 class MagicCloth : public Tool{ public: MagicCloth(){ this->name="MagicCloth"; } int attack; int defense; }; …

3
实现自定义HTTP方法是否有问题?
我们的网址格式如下 / instance / {instanceType} / {instanceId} 您可以使用标准的HTTP方法来调用它:POST,GET,DELETE和PUT。但是,我们还有其他一些操作,例如“另存为草稿”或“制作” 我们认为我们可以只使用自定义HTTP方法,例如:DRAFT,VALIDATE,CURATE 我认为这是可以接受的,因为标准说 “下面定义了HTTP / 1.1的一组常用方法。尽管可以扩展此组,但是不能假定其他方法可以为单独扩展的客户端和服务器共享相同的语义。” 像WebDav这样的工具会创建一些自己的扩展。 定制方法是否会遇到问题?我正在考虑代理服务器和防火墙,但是任何其他令人关注的方面都欢迎。我应该放心一点,只是拥有URL参数,例如action = validate | curate | draft?
34 rest  http 

3
C ++ 11是否解决了在动态/共享库边界之间传递std lib对象的问题?(即dll等)?
我对C ++的主要抱怨之一是在实践中将标准库对象传递到动态库(例如dll / so)边界之外有多么困难。 std库通常是仅标头的。这非常适合进行一些很棒的优化。但是,对于dll,它们通常是用不同的编译器设置构建的,这可能会影响std库容器的内部结构/代码。例如,在MSVC中,一个dll可能会在打开迭代器调试的情况下构建,而另一个dll会在关闭调试器的情况下构建。这两个dll可能会遇到传递标准容器的问题。如果std::string在界面中公开,则不能保证客户端使用的代码与std::string库的完全匹配std::string。 这导致难以调试问题,头痛等。您要么严格控制组织中的编译器设置以防止出现这些问题,要么使用没有这些问题的更简单的C接口。或向您的客户指定他们应使用的预期编译器设置(如果另一个库指定了其他编译​​器设置,则很糟糕)。 我的问题是C ++ 11是否试图做任何事情来解决这些问题?
34 c++  libraries  c++11 

4
Little Endian赢了吗?
最近在教大恩迪与小恩迪恩之战时,一个学生问它是否已经解决,我意识到我不知道。查看Wikipedia文章,似乎当前最流行的OS /体系结构对使用Little Endian,但是Internet协议指定Big Endian用于在数据包头中传输数值。这将是当前状态的一个很好的总结吗?当前的网卡或CPU是否为切换字节顺序提供硬件支持?

3
为什么在Microsoft SQL Server中我们需要在字符串前放置N?
我正在学习T-SQL。从我看到的示例中,要在varchar()单元格中插入文本,我只能编写要插入的字符串,但是对于nvarchar()单元格,每个示例都在字符串前加上字母N。 我在具有nvarchar()行的表上尝试了以下查询,并且工作正常,因此不需要前缀N: insert into [TableName] values ('Hello', 'World') 为什么在我看到的每个示例中,字符串都以N为前缀? 使用此前缀的利弊是什么?

8
如何确定一个班级是否符合单一责任原则?
单一责任原则基于高度凝聚力原则。两者之间的区别在于,具有高度凝聚力的班级具有一系列密切相关的职责,而遵守SRP的班级仅具有一个职责。 但是,我们如何确定某个特定类别是否具有一组职责并因此具有高度凝聚力,或者它是否仅具有一项职责并因此遵守SRP?换句话说,是不是有些主观,因为有些人可能认为一类非常细化(因此相信该类遵循SRP),而另一些人可能认为它不够细密?


21
为什么大型IT项目往往会失败或成本/进度超支大?[关闭]
我总是读到完全或几乎完全是灾难的大规模改造或集成项目。即使他们以某种方式成功地取得了成功,成本和进度也非常巨大。大型项目更容易失败的真正原因是什么。可以在此类项目中使用敏捷还是传统方法仍然是最好的。 澳大利亚的一个例子是昆士兰薪资项目,他们改变了测试成功标准来交付该项目。 在此SO问题中查看更多失败的项目(在Wayback Machine上) 您有什么个人经验要分享吗?

5
Python mixins是反模式吗?
我完全意识到,pylint其他静态分析工具并非一无所知,有时必须不听从他们的建议。(这适用于各种类型的消息,而不仅仅是conventions。) 如果我有像 class related_methods(): def a_method(self): self.stack.function(self.my_var) class more_methods(): def b_method(self): self.otherfunc() class implement_methods(related_methods, more_methods): def __init__(self): self.stack = some() self.my_var = other() def otherfunc(self): self.a_method() 显然,这是人为的。如果您愿意,这是一个更好的示例。 我相信使用“ mixins”来称呼这种风格。 像其他工具,pylint利率这个代码的-21.67 / 10,主要是因为它认为more_methods并related_methods没有self或属性otherfunc,stack,annd my_var因为没有运行的代码,它显然不能看到related_methods和more_methods在混合中implement_methods。 编译器和静态分析工具不能总是解决Halting问题,但是我认为这确实是一种情况,其中查看继承者的内容implement_methods将证明这是完全有效的,并且这很容易做到。 为什么静态分析工具会拒绝这种有效的(我认为)OOP模式? 要么: 他们甚至不尝试检查继承或 不鼓励在惯用且易读的Python中使用mixins #1显然是不正确,因为如果我问pylint告诉我的一类矿井的继承unittest.TestCase使用 self.assertEqual,(仅定义的东西unittest.TestCase),它并没有抱怨。 mixins是unpythonic还是不鼓励使用?

3
我可以从封闭源应用程序链接到GPL库吗?
好的,在所有人大声疾呼重复问题之前,是的,我已经在这里看到过类似的几个问题。但是没有人回答这个问题。 如果我链接到GPL版本的库而不修改该库,是否需要发布源代码? 根据这个问题,答案是肯定的! 但是这个答案对我来说并不令人满意。答案基本上是说,如果不使代码开源,就无法以任何方式使用GPL代码。 但是,如果先前的说法是正确的,那么这将表明没有任何人或组织可以在Linux上发布任何专有软件。哪一定是错的。仅仅是因为为了使任何应用程序执行任何有用的操作,请打开文件,写入控制台,创建TCP连接,因此必须将应用程序链接到libcGPL版本。 所以我的问题是:如果GPL声明,如网站上所有先前的回答所述,链接到另一个GPL程序的程序必须是GPL本身,那么如何创建/发行/出售任何专有应用程序完全可以在Linux上运行?由于如上所述,该应用程序必须像GPL代码一样,才能在Linux上运行。 一个更实际的示例说,我链接到在非GPL应用程序中使用GPL编写的共享库,这会迫使非GPL应用程序成为GPL编写吗?更具体地说,如果我使用GPL库而不进行修改,然后将该库作为.so或分发.dll,这是否要求我的应用程序是开源的?
34 gpl  linking 

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.