软件工程

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

2
顶级功能的UML类图符号
用UML类图表示法,如何表示一个没有任何封装类或其他结构的顶级函数? 例如,我有一个用于从URL检索数据的功能。由于它是仅具有其参数和共享全局状态的函数(从数学意义上来说),因此该函数不会放在类中,而是留给顶级方法使用。 但是,现在,我需要使用它为程序创建一个UML图,而我找不到关于如何表示顶级函数的任何信息。我该怎么做呢?
13 uml 



1
Java正则表达式模式-编译时间常数还是实例成员?
当前,我有几个单例对象,它们在正则表达式上进行匹配,并且Patterns的定义如下: class Foobar { private final Pattern firstPattern = Pattern.compile("some regex"); private final Pattern secondPattern = Pattern.compile("some other regex"); // more Patterns, etc. private Foobar() {} public static Foobar create() { /* singleton stuff */ } } 但是前几天有人告诉我这是不好的风格,Pattern应该始终在类级别定义s ,而看起来像这样: class Foobar { private static final Pattern FIRST_PATTERN = Pattern.compile("some regex"); …

3
依赖注入:在什么时候可以创建一个新对象?
我正在重构PHP应用程序,并且我试图做的是尽可能多的依赖项注入(DI)。 我觉得我已经很好地了解了它的工作原理,而且我当然可以看到我的课程变得更加精简和强大。 我进行重构,以便可以在类中注入依赖关系而不是创建一个新对象,但是在某些时候,我将不得不创建一些对象,即使用dreaded new关键字。 我现在遇到的问题是我实际上可以在什么时候创建新对象?看起来我将结束于顶级课程,创建大量新对象,因为没有其他可去之处。这感觉不对。 我读过一些使用工厂类创建所有对象的博客,然后将工厂注入其他类中。然后,您可以调用工厂方法,然后工厂为您创建新对象。 我担心的是,现在我的工厂班将new全部免费!我猜这是工厂类的方法,这可能是可以的,但是使用工厂模式和DI时是否要遵守一些规则,还是我在这里偏离了常规?

4
在MVC中使用服务层
如果控制器太胖,并且模型实例化开始加起来,则可以使用服务层。 如果仅将逻辑包装在服务类中,则将获得一堆带有一个/两个方法的服务。感觉像是代码气味。有什么最佳实践吗? 服务可以实例化模型吗? 如果服务实例化模型,则不能对服务进行单元测试。它们只能接受集成测试吗?
13 mvc  services 

5
如何记录已经开发的项目?
我想知道哪些选项可用于记录已开发的项目,因为从事该项目的开发人员甚至没有编写任何页面的文档。 该项目没有其他细节,只有许多页面的脚本具有过去两年来从事该项目的开发人员编写和修改的功能。我所拥有的只是数据库架构和项目文件。我想知道是否有任何方法可以组织这个项目并将其记录下来,从而对将来将从事此项目的开发人员有所帮助。 该项目是使用PHP和MySQL开发的。这些函数的注释很差,所以用doxygen运行时无法获得良好的结果。


2
在类上声明字段实际上在PHP中有害吗?
考虑下面的代码,由于我过去几次实际犯的普通编程错误,故意将设置器破坏了: <?php class TestClass { private $testField; function setField($newVal) { $testField = $newVal; // deliberately broken; should be `$this->testField = $newVal` } function getField() { return $this->testField; } } $testInstance = new TestClass(); $testInstance->setField("Hello world!"); // Actually prints nothing; getField() returns null echo $testInstance->getField(); ?> 我$testField在类的顶部声明的事实有助于隐藏我的编程错误。如果我没有声明该字段,那么在调用此脚本时,我会在错误日志中得到类似于以下警告的信息,这可能对帮助调试非常有价值-特别是如果我要在这样的错误中进行操作大型复杂的实际应用程序: PHP注意:未定义的属性:第13行的/var/www/test.php中的TestClass :: $ testField …
13 php 

4
手动进行依赖注入是否可以更好地替代组成和多态性?
首先,我是入门级程序员;实际上,我正在整个夏季完成AS学位,并完成了最终的顶峰项目。在我的新工作中,当我没有什么项目要做(他们正在等待团队中有更多新员工的到来)时,我在等待的过程中会得到一些可供阅读和学习的书籍-一些教科书,其他与其说是“代码完成”,不如说是。看完这些书之后,我转向互联网学习尽可能多的知识,并开始学习SOLID和DI(我们谈论了Liskov的替代原理,但没有其他SOLID想法)。因此,据我所知,我坐下来做得更好,并且开始编写一些代码以手工使用DI(开发计算机上没有DI框架)。 正如我所做的那样,我发现它感觉很熟悉……而且似乎很像我过去使用多态抽象类的组合所做的工作。我在这里想念大图吗?关于DI(至少是手工),还有其他一些东西吗?我了解在某些DI框架的代码中不包含配置的可能性,这些优点在无需重新编译的情况下就具有很大的好处,但是在手工操作时,我不确定它是否与上述内容有所不同...对此有一些了解将非常有帮助!

6
什么是打印使用/帮助(-帮助)的最佳实践?
在为UNIX的CLI编写工具时,应如何使程序打印出帮助和/或用法? 我通常使用fprintf(stderr, "help text here");,但是有几个问题。 首先,我不确定是否应该使用stderr。可以,还是应该使用stdout? 可以想象,帮助文本很长,具体取决于该工具有多少选项。现在,我通常只需"strings like that\n"在第二个参数中输入几个即可。但是,这用五十行或更多行帮助文本填充了我的源代码。根本不容易管理。我该怎么办呢? 当工具不是用C或类似C的语言编写时,我倾向于在可能的情况下使用here-docs(在Perl中最为明显)。我不能在C语言中使用它,但是我可以使用类似的东西吗? 我正在考虑将其放在a的headerfile.h内部#define HELP "help text here",我从未在野外看到它,也不知道我是否应该真正使用它。 理想情况下,我可以将文本放在外部文件中并包含它。但是,使用#include它似乎是错误的。那我该怎么办? 这个想法是要有一个易于管理的帮助文本。将其包含在源代码中并不是很方便。

4
我可以使用哪种类型的编码来缩短字符串?
我对编码我拥有的字符串感兴趣,并且我很好奇是否存在可以使用的编码类型,该编码类型仅包括字母和数字字符,并且最好缩短表示该字符串所需的字符数。 到目前为止,我已经研究过使用Base64编码执行此操作,但是它似乎使我的字符串更长,有时包括==我想避免的字符串。例: 测试名称| 120101 变成 dGVzdCBuYW1lfDEyMDEwMQ == 长度从16到24个字符,并且包含非字母数字。 有人知道我可以使用满足我要求的其他编码类型吗?奖励点在于它是内置在.NET框架中还是存在将进行编码的第三方库。

4
每个C程序员必须注意哪些安全风险/漏洞?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 4年前关闭。 与硬件的密切联系存在许多安全风险,这与使用高级编程语言经过测试和验证的API形成对比。与诸如Java之类的语言相比,用C引起缓冲区溢出要容易得多。 每个C程序员都应该意识到哪些风险或漏洞(例如缓冲区溢出)(与C程序员相关的IE漏洞)?这些可能导致什么问题?如何避免它们,以及导致这些错误在程序中发生的常见错误是什么?

2
您如何处理数据库更改部署?
今天,我们一直在讨论数据库部署技术,在当前的过程中最近发生了几次失败,并且看到了一些情况,在这些情况下我们希望回滚部署,但是从未对旧版本的应用程序进行过测试。数据库。 一方面,存在迁移样式的部署,其中您具有版本上升指令和版本下降指令(无论是用SQL还是用您的应用程序语言编写的),并且您的应用程序知道需要获取哪个版本。 这些很简单,而且由于我们不会经常回滚,因此开发人员热衷于简单。但是,当您添加字段/表并在回滚之前填充该字段时,存在风险。或更糟糕的是,您删除了与先前版本相关的数据。 另一方面,我们可以考虑使用升级,回滚,前滚方法,其中回滚不像迁移那样剧烈。例如,升级可能会添加一个不可为空的字段;回滚使它可以为空,以便旧应用程序不在乎;前滚会填充空字段,并使它再次不可为空。 这样可以保留数据,但是代码和测试都很复杂(遗憾的是,我们几乎不存在自动集成测试,而在我们进行纠正的同时,我们也遇到了问题)。 有安全的方法来缓解这些问题吗?我还应该考虑其他选择吗?您是否想分享一些不好的经验,这些经验可以在以后帮助我减轻痛苦?
13 database 

2
我如何才能充分利用自己的编码技能?
到今年秋天,我的两个小型网站每月的最低/零投入应该总计约为1200美元,这足以让我过上舒适的生活。 我宁愿花几年的时间做一些真正好的事情,也可以帮助需要它的其他人,而不愿从事另一项业务。我想花4到5年的时间将自己的时间用于有价值的事业,并尽我所能来帮助我掌握已有的Web开发和编程技能。 问题是我不知道从哪里开始。我对自己的想法并不了解,并且对许多大型慈善机构表示怀疑。理想情况下,我想找到一个小型项目,每个人都没有薪水,专注于帮助。 有没有这么小的组织? 是否有人想出一个项目/网站/应用程序的想法,可以帮助有需要的人希望他们与我合作或与他们合作? 我知道这不是典型的StackOverflow 2 + 2 =?类型问题,有些人会很想删除它,但考虑到IT行业的慈善性质(仅看SO本身),这对于现在或在职业生涯中的许多开发人员来说都是非常相关的问题。考虑到日本最近发生的事件,这个问题与许多寻求与他人分享技能和时间来帮助他人的人特别相关。 真的很期待阅读您的想法/答案,谢谢大家
13 c#  java  php  javascript  jquery 

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.