软件工程

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

3
在Visual Studio中调试/发布项目之前,我需要清理/重建项目吗?
这可能是一个愚蠢的问题,但是在调试或发布Visual Studio项目之前是否需要清理/重建? 我看到其他开发人员一直在这样做,有时甚至我甚至都没有想到就开始这样做。似乎总是习惯清理,等待,重建,等待,发布。 我知道我并不总是这样做。...我想是在花了很多时间调试错误之后才开始做的,只是发现在我清理并重建解决方案后它消失了。我已经不止一次遇到这个问题,所以我知道这不是一次性的事情,但是总清理/重建项目似乎浪费了很多时间。


4
接口和方法签名是否受版权保护?
例如,如果我编写一个名为Random的类,其目的和方法签名与Microsoft的.Net System.Random类完全相同,是否会侵犯版权?使用哪种语言会有所不同吗?在这种情况下,我想编写一个在ActionScript中使用的Random类,该类缺少内置的种子PRNG类。 如果有人拥有良好的链接或参考建议以了解软件的哪些方面受到保护,那也很好。是的,我知道这不是“真正的”法律建议的地方。如果有人去法院指责公共留言板是最重要的事情,那就可耻了。

3
如何在UML序列图中包括条件?
我喜欢画一个UML序列图来显示系统不同部分的动作和交互的顺序(我认为它们称为参与者)。 但是,我需要在if then else此处添加语句。我做错什么了吗?我可以在UML序列图中使用条件if语句吗?怎么样?


4
您如何分配错误代码?
在开发中型项目时,如何识别,创建和维护错误代码? 我一生都无法想到一种简单而干净的方法。我的一些想法将类名和方法名转换为整数字符串,但这是很长的时间,因为方法名和类名可能会更改(希望不会!)。其他人只是使用递增日志系统(即,当我创建新的错误消息时,只需在最后一个错误消息ID上加1)。但这完全是无组织的。 更具体地说,我正在谈论错误代码,例如: Error 401 Unauthorized.


4
微服务中的多对多关联
我目前有两个微服务。我们称它们为A和B。 微服务下的数据库A具有下表: A |-- users 微服务下的数据库B具有下表: B |-- trackers 需求说明users并trackers具有多对多关系。 我不确定如何在微服务架构中正确处理此问题。 我可以看到此方法是以下三种方法之一: 一个user_trackers表添加到微服务A。这类似于包含表中的“ users和”的“外键”的联接表trackers。 一个owners表添加到微服务B。该表的作用类似于多态联接表。这将允许任何服务创建与跟踪器的关联。这可能看起来像这样: B |-- trackers |-- owners |-- owner_id |-- owner_type |-- tracker_id 为保存记录users并trackers在每个微服务。使它们与某种pubsub系统保持同步。 我最初打算使用选项2,因为我喜欢它保留了事务边界。我可以创建一个跟踪器并将其与某些原子关联。但是,它似乎超出了微服务的范围B。微B服务为什么要关心微服务A想要建立关联? 我觉得这里可能存在一个我不知道的好模式。我提出的任何选择是否有意义?还有另一种可能更有意义的选择吗?

2
传统消息代理和流数据
根据Kafka网站: “ Kakfa用于构建实时数据管道和流应用程序。 ” 在广泛的互联网上搜索,我发现以下“ 流数据 ”是什么? 流数据是通过网络从源连续地流到目的地的数据。和 流数据本质上不是原子的,这意味着流的数据流的任何部分都是有意义的和可处理的,与文件的字节相反,除非您拥有全部字节,否则它什么都没有。和 流数据可以随时启动/停止;和 消费者可以随意附加和分离数据流,并只处理他们想要的部分数据 现在,如果我上面所说的任何内容不正确,不完整或完全错误,请先纠正我!假设我或多或少都在轨道上,那么... 现在,我了解了什么是“流数据”,然后,我了解了Kafka和Kinesis在将自己称为具有流数据的应用程序的处理/中介中间件时的含义。但这激起了我的兴趣:可以/应该像传统的消息代理一样,将Kafka或Kinesis之类的“流中间件”用于非流数据吗?反之亦然:是否可以/应该使用RabbitMQ,ActiveMQ,Apollo等传统MQ来传输数据? 让我们以一个示例为例,其中应用程序将发送其后端常量的需要处理的JSON消息,并且处理过程相当复杂(验证,数据转换,过滤,聚合等): 情况1:消息是电影的每一帧;每个视频帧包含一个JSON消息,其中包含帧数据和一些支持的元数据 情况2:消息是时间序列数据,可能是某人的心跳随时间变化的函数。因此,发送了#1表示我在t = 1时的心跳,消息#2包含了我在t = 2时的心跳,依此类推。 情况3:数据是完全不同的,并且按时间或作为任何“数据流”的一部分不相关。可能随着数百名用户导航应用程序的单击按钮并采取措施而引发的审核/安全事件 根据Kafka / Kinesis的结算方式以及我对“流数据”的理解,它们似乎是案例1(连续的视频数据)和案例2(连续的时间序列数据)的明显候选者。但是,我看不出任何原因,如RabbitMQ之类的传统消息代理也无法有效地处理这两种输入。 在案例3中,仅向我们提供了一个已发生的事件,我们需要处理对该事件的反应。所以对我来说,这意味着需要像RabbitMQ这样的传统经纪人。但是,也没有理由不能让Kafka或Kinesis也不能处理事件数据。 因此,基本上,我正在寻求建立一个表述:我有具有Y特征的X数据。我应该使用像Kafka / Kinesis这样的流处理器来处理它。或者,相反,它可以帮助我确定:我拥有具有Z特征的W数据。我应该使用传统的消息代理来处理它。 因此,我想问:关于数据的哪些因素(或其他因素)有助于指导流处理器或消息代理之间的决策,因为两者都可以处理流数据,并且两者都可以处理(非流)消息数据?

2
多租户微服务设计
我们正在将单片应用程序迁移到微服务架构。由于某些法规要求,我们必须将来自不同国家/地区的客户数据保存在单独的(特定于国家/地区)数据库中。即美国客户的美国数据库,英国客户的英国数据库... 我们正在考虑的以下设计如下: 选项1:具有休眠多租户支持的多租户应用程序,可以根据需求扩展到N次(例如kubernetes pod)。该应用程序的单个实例将能够连接到所有数据库。 选项2:每个国家/地区数据库部署1个微服务实例。通过它们前面的API网关路由流量 如果要设计这种类型的系统,您会选择什么?

8
C字符串是否始终以null终止,还是取决于平台?
现在,我正在使用嵌入式系统,并研究在没有操作系统的微处理器上实现字符串的方法。到目前为止,我正在做的只是使用使NULL终止的字符指针并将它们视为NULL表示结尾的字符串的想法。我知道这很普遍,但是您是否总是可以指望这种情况? 我问的原因是我正在考虑也许在某个时候使用实时操作系统,并且我想尽可能多地重用当前代码。因此,对于存在的各种选择,我是否可以期望字符串能够正常工作? 让我更具体地说明我的情况。我正在实现一个通过串行端口接收和处理命令的系统。我能否保持命令处理代码相同,然后期望在RTOS(包含命令)上创建的字符串对象全部以NULL终止?还是根据操作系统而有所不同? 更新资料 在被建议看一下这个问题之后,我确定它不能完全回答我的要求。问题本身是在询问是否应该始终传递字符串的长度,这与我要问的完全不同,尽管某些答案中包含有用的信息,但它们并不是我要找的。那里的答案似乎提供了为什么或为什么不以空字符终止字符串的原因。我要问的是,我是否可以或多或少地期望不同平台的出生字符串以空值终止自己的字符串,而不必走出去尝试在那里的每个平台。

2
如何命名在Python中返回值的函数?
我对在Python中为函数选择名称感到困惑。有时,Python内置函数势在必行,例如:printfunction和string method find。有时它们不是这样的:例如,len它的名称不是必须的calculate_len,而type不是find_type。 我可以理解,它print返回了一个我们不使用的值(即None),并且执行了某项操作(即,它在屏幕上显示了一个字符串),因此其名称势在必行。 但是len返回一个我们使用并执行某项操作的值(即,计算序列或映射中有多少个项。),其名称不是必须的。另一方面,find字符串方法(as len)返回一个我们使用并执行某操作的值,并且它的名称是必要的。 问这个问题的原因是,我将使用Caesar密码对字符串进行加密和解密的脚本进行了审查。审稿人说: 只是一种直觉:函数可以完成任务。因此,一个函数的好名字是势在必行的:我会用rotate_letter代替rotated_letter。 rotated_letter返回表示由数字旋转的字母的单字母字符串。我不知道有什么更好的,我用rotated_letter它返回一个值,就像random模块中的randint function,不是。generate_randint 因此,在这种情况下,我应该如何命名一个返回要使用的值的函数?我应该将名称设为命令性还是仅是名词。在其他情况下,显而易见的是如何执行此操作,例如布尔函数,例如is_even和is_palindrome我们将其设为是/否问题,以及仅执行并返回未使用的值(即None)的函数,例如printand list方法。sort。

3
DDD:将域事件处理程序放在哪里?
您能否告诉我您的观点,哪一层适合将域事件处理程序放置在DDD中?例如,我有应用程序服务来添加新合同,并且我想在合同添加后向联系人发送电子邮件通知,电子邮件发件人(处理ContractAdded事件)应用程序服务或域服务还是还有什么吗

3
你为什么需要“自我”。在Python中引用实例变量?
我一直在编程多种语言,例如Java,Ruby,Haskell和Python。由于我从事的项目不同,我每天必须在多种语言之间切换。现在,问题是我常常忘记写代码,self因为Python中函数定义中的第一个参数与在同一对象上调用方法相同。 也就是说,我对Python的这种方法感到惊讶。基本上,我们必须键入更多内容才能完成工作,在Java和Ruby之类的语言中,通过自动引用当前对象中的变量使事情变得简单。 我的问题是为什么这是self必要的?纯粹是样式选择,还是有原因导致Python不能让您忽略selfJava和C ++的想法this?

3
组成重于继承,但
我试图自学软件工程,遇到一些使我感到困惑的冲突信息。 我一直在学习OOP,以及什么是抽象类/接口以及如何使用它们,但是随后我读到,应该“偏重于继承而不是继承”。我知道组合是指一个类组成/创建另一个类的对象以利用/与该新对象的功能交互。 所以我的问题是...我应该不使用抽象类和接口吗?是否不创建抽象类并在具体类中扩展/继承该抽象类的功能,而是仅编写新对象以使用其他类的功能? 或者,我应该使用组合并从抽象类继承吗?两者结合使用?如果是这样,您能否提供一些示例,说明其工作方式及其好处? 因为我最熟悉PHP,所以在继续使用其他语言并转移我新获得的SE技能之前,我正在使用它来提高OOP / SE技能,因此,使用PHP的示例非常受赞赏。

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.