Questions tagged «programming-practices»

编程实践是软件开发中常用或不常用的实践。这些可以包括敏捷开发,看板,编码快捷方式等。

3
什么时候不推荐使用Java
作为重构工作或正在进行的开发的一部分,某种方法或整个类可能会在某种意义上过时。Java支持该@Deprecated注释,以指示可能存在更好的方式来处理所涉及的功能。我想这在公共API中特别有用,在公共API中可能不知道删除API部分的影响。对于非公共API和使用版本控制系统的项目(从某种意义上讲,可以撤消删除操作),什么时候宜弃用而不是删除过时的元素?

3
是否有充分的理由使用Java的Collection接口?
我听到过这样的论点,即您应该使用可用的最通用的接口,以免与该接口的特定实现联系在一起。此逻辑是否适用于java.util.Collection之类的接口? 我宁愿看到如下内容: List<Foo> getFoos() 要么 Set<Foo> getFoos() 代替 Collection<Foo> getFoos() 在最后一种情况下,我不知道我要处理哪种数据集,而在前两种情况下,我可以对顺序和唯一性做出一些假设。除了作为集合和列表的逻辑父代之外,java.util.Collection是否有用? 如果在进行代码审查时遇到使用Collection的代码,您将如何确定其用法是否合理,以及对使用更特定的界面替换它有何建议?

6
您使用什么软件来帮助您计划团队工作,为什么?
规划非常困难。我们天生不擅长估计自己的未来,许多认知偏见加剧了这个问题。小组计划更加困难。信息不完整,对情况的看法不一致以及沟通问题加剧了困难。 敏捷方法为组织小组计划提供了一个框架-使计划对所有人可见(用户故事),将计划分成较小的块(冲刺),并提供回顾性分析,以便您更好地进行计划。但是,找到支持这些做法的好的工具被证明是棘手的。 您使用什么软件工具来实现这些目标?您为什么要使用该工具?您使用特定工具取得了哪些成功?

7
哪些特定的实践可以称为“软件技巧”,而不是“软件工程”?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 尽管这不是一个新主意,但在过去几年中,人们对软件工艺的兴趣似乎已大大增加了(特别是经常被推荐的书Clean Code的全书是Clean Code:A Agile Software Craftsmanship)。 我个人认为软件工艺是一种很好的软件工程,并且对确保最终结果感到高兴(无论是作为最终用户还是作为维护该软件的人)都很感兴趣,并且也将重点放在编码级别上事物比上级过程事物更重要。 打个比方-许多建筑物都是在50年代和60年代以非常现代的风格建造的,很少考虑居住在其中的人或这些建筑物随着时间的流逝如何。这些建筑中有许多迅速发展成贫民窟,或者在其预期寿命很久之前就被拆除了。我相信大多数有几年经验的开发人员都会经历过类似的代码库。 软件工匠可能会做哪些软件工程师(可能是坏人)可能不会做的具体事情呢?

12
布尔逻辑的可维护性-是否需要语句嵌套?
其中哪一个对可维护性更好? if (byteArrayVariable != null) if (byteArrayVariable .Length != 0) //Do something with byteArrayVariable 要么 if ((byteArrayVariable != null) && (byteArrayVariable.Length != 0)) //Do something with byteArrayVariable 我更喜欢阅读和编写第二篇文章,但我想起在代码中阅读完整内容是,这样做不利于可维护性。 这是因为if如果第一部分为假,并且并非所有语言都这样做,则您依赖语言来不评估第二部分。(第二部分如果使用null评估,将引发异常byteArrayVariable。) 我不知道这是否真的值得担心,我想就这个问题提供一般反馈。 谢谢。

2
DDD中的例外
我正在学习DDD,并且正在考虑在某些情况下引发异常。我知道对象不能进入错误状态,因此这里的异常很好,但是在许多示例中,例如,如果我们尝试使用数据库中存在的电子邮件添加新用户,也会抛出异常。 public function doIt(UserData $userData) { $user = $this->userRepository->byEmail($userData->email()); if ($user) { throw new UserAlreadyExistsException(); } $this->userRepository->add( new User( $userData->email(), $userData->password() ) ); } 因此,如果存在使用此电子邮件的用户,那么我们可以在应用程序服务中捕获异常,但我们不应该使用try-catch块来控制应用程序的操作。 最好的方法是什么?

4
如何包装服务,使其更简单
我们依赖于第三方服务,该服务公开了一个巨大的接口,我们只需要像3种方法。此外,界面经常更改... 我决定将接口包装在我们项目的一个类中,只公开我们需要的方法。 但是我不确定如何处理返回值...接口返回类型为的对象Storage。我们内部有一个类型StorageModel,它是a的内部表示形式Storage。 您将在映射器中返回什么:Storage或StorageModel?我们有一个DataService StorageService,它获得了注入的包装的依赖关系。 目前,我基本上是这样的: public class StorageService { private readonly IExternalStorageWrapper externalStorageWrapper; public StorageService(IExternalStorageWrapper externalStorageWrapper) { this.externalStorageWrapper = externalStorageWrapper; } public StorageModel GetStorage(int storageId) { return this.externalStorageWrapper.GetStorage(storageId).ConvertToStorageModel(); } } public class ExternalStorageWrapper : IExternalStorageWrapper { public Storage GetStorage(int storageId) { using(var ext = new ExternalStorage()) { return ext.GetStorage(storageId); …

2
使用字符串或int引用系统的Java部分之外的枚举更好吗?
我们在工作中讨论了Java中枚举的使用。 一位同事争辩说,在服务器端使用枚举时,每当需要时,我们都应该使用字符串来引用它(例如,当从JS向服务器发送数据或存储在数据库中时),认为这更加清楚了。对于开发人员来说也很困难,如果出现拼写错误,它将很快失败。 在这些情况下,我总是使用整数来标识枚举,因为它是不可变的标识符,并且不会出现大小写和拼写错误(即使开发人员错误地使用了值2而不是1,也不会很快失败)。 对这些参数非常分析,我会说使用字符串会更好,但是我对此有一种奇怪的感觉(好像这不是一个好方法)。 关于此讨论,是否有任何最佳实践可以指导我? 编辑:只要有可能,我们就使用枚举本身,因此我们所有的Java代码都使用枚举。“引用枚举”的意思是:在将数据从JavaScript交换到服务器或将数据存储在数据库中时,引用枚举中的值

4
面向对象编程中的主要职责是什么?
我是面向对象编程的新手,但我不明白主对象的目的是什么。 是的,我读到它是程序的“入口点”,但是我不明白的是程序的主要内容是什么?它的职责是什么? 可能会发生将主体编写的内容封装到另一个对象中的情况,但是您应该使用这种方法多少呢? 这是我用Java编写的第一个主语言,它很简单,但是可能会让您更好地理解我的疑问。我有一个抽象类Animal,它由“ Cat”和“ Dog”扩展。我使用main来创建一些对象,并使用它作为与用户的“接口”,确实如您所见,我使用了一些条件指令来“询问用户”他想做什么。 我的问题来自于这样一个事实,即接口可以封装在另一个对象中,而不是把责任交给主要对象。 public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.println("What type of animal do you want to create? \n dog cat"); String type = input.nextLine(); if ( Objects.equals(type, "dog")){ System.out.println("Enter the animal's age: "); int age = input.nextInt(); // Scans the …

5
将文本标记放在字符串中是否不好?有其他选择吗?
我使用大量字符串,需要大量操作。 例如,我可能会生成这样的字符串: 第1部分船 A节 编程 第2部分用于编程的分区船。 AA 节SQL条目。 该字符串太大,无法手动检查它的每个部分。现在,我需要split将此string分为stringlist几个部分。我可以想到两种选择: 正则表达式: QStringList sl = s.split(QRegularExpression("\n(?=Part [0-9]+|Section [A-Z]+)")); 看起来应该可以,但是有时会漏掉一些异常(即:Section SQL Entries错误地分裂) 否则,我可以做的就是在生成初始字符串时放置一个标记: 🚤💻Part1 船 AA节 编程 🚤💻第2部分用于编程的分区船。 A 第AA 节“ SQL条目”。 这意味着分割字符串将变得容易: QStringList sl = s.split("🚤💻")); 有人告诉我,这些都不是好的样式或编程实践,但是直到现在我还没有讨论它,也没有找到替代方法。 如果您是我的项目经理,您会接受这两种方法吗? 如果没有,您会建议我做为最佳做法吗?

4
我应该在IDE项目的存储库中包括什么
我想添加一个在这种情况下在Netbeans中创建的项目,但是这个问题对于大多数IDE来说都是通用的。很简单,我应该在存储库中包含什么。例如,Netbeans创建一个nbproject文件夹,eclipse创建一个.settings文件夹等。如果我将这些包含在我的存储库中,则包含或不包含项目特定设置的优点/缺点是什么? 在这种情况下,这是一个个人项目,因此我不认为其他人会开始进行该项目,但是最好添加最少的项目设置,这样项目本身就可以轻松在不同的机器上开始工作。

4
替换为Java的instanceof?
因此,我对现实世界中的编程(学术项目之外)还很陌生,并且遇到了很多帖子,他们说instanceof使用来确定特定对象的类是一件坏事。 我的情况是我有三个类,一个基本产品类,一个扩展了该类,另一个扩展了该类。这些都存储在数据库的同一表中,我有一些代码需要使用每个方法来提取数据。 解决这种问题的最佳实践是什么?我已经阅读了有关多态性的一些知识,但是找不到解决我所遇到问题的任何示例。它们通常都覆盖了一个对我来说不起作用的方法,因为我需要从不同的对象中提取不同的东西。 有没有更好的方法可以做到这一点,还是我坚持使用instanceof某种反射来获取特定于对象的字段?

4
使用数据结构的算法与使用数据库的算法之间有什么区别?
一般问题 使用数据结构的算法与使用数据库的算法之间有什么区别? 一些背景 这个问题困扰了我一段时间,而我却无法给出令人信服的答案。 目前,我正在努力加深对当然会大量涉及数据结构的算法的理解。这些是基本结构,例如袋,队列,堆栈,优先级队列和堆。 我还每天使用数据库来存储最终用户已处理和提交或程序处理过的数据。我通过DAL检索和提交数据,该DAL具有自己的数据结构,该结构是根据数据库中的表生成的。 当我可以选择使用数据库对数据进行排序以按升序/降序将其发送回给我或检索并将数据加载到我的逻辑中,在优先级队列中处理此数据并进行堆排序时,我的问题就来了所有的。或者另一种方法是使用数据库搜索记录,而不是加载记录的子集并使用诸如二进制搜索之类的方法来查找我感兴趣的一个或多个记录。 在我看来,由于通信成本很高,因此在发送数据库端之前,我将尝试在数据库端进行尽可能多的操作。这也使我想知道您何时使用严格在自己的逻辑内定义的算法和数据结构,而不是处理数据库而不是数据库的数据? 所以这是问题... 问题 数据结构和数据库之间有什么区别? 我们什么时候使用的算法仅使用您自己的逻辑而不是数据库逻辑定义的数据结构? @Harvey发表:什么时候数据库中的方法变得比您自己的逻辑中的方法效率低? @mirculixx帖子:什么使方法有效? @Harvey帖子:处理具有数据结构的数据比在数据库中处理数据更快? 澄清说明 @Grant帖子:我通常使用的数据库是关系数据库,这些问题来自于它们的使用。但是,我确实认为这些问题适用于任何持久性框架(当我说框架时,我的意思是最一般的意义)。 我知道没有特定上下文的答案很难。我正在寻找有想法的食物,建议或讨论要点,将不胜感激!

3
软件开发中是否存在“伪实现”这样的概念?
我正在寻找一个标签来描述使用基于人的计算方法或其他“伪造”算法手段的实践,以便快速推出产品或演示而无需花费时间来开发技术/可扩展/解析解决方案?例如:使用Amazon Turk来计算一家餐厅中空桌子的数量。 我也希望了解有关此主题的更多信息,但不确定要搜索什么。基于人的计算只是一种方法,我对伪实现的一般概念感兴趣。有什么想法,建议阅读?

3
是否需要XML注释文档?
我曾经是要求XML注释用于文档的爱好者。从那以后,我改变了主意,主要有两个原因: 像好的代码一样,方法应该是不言自明的。 实际上,大多数XML注释都是无用的噪声,不会提供任何附加值。 很多时候,我们只是使用GhostDoc生成通用注释,这就是我所说的无用噪声: /// <summary> /// Gets or sets the unit of measure. /// </summary> /// <value> /// The unit of measure. /// </value> public string UnitOfMeasure { get; set; } 对我来说,这很明显。话虽如此,如果要包含特殊说明,那么我们绝对应该使用XML注释。 我喜欢这篇文章的摘录: 有时,您将需要写评论。但是,这应该是例外而不是规则。仅当注释表示无法用代码表达的内容时,才应使用注释。如果要编写简洁的代码,请努力消除注释,而改写自记录代码。 我认为我们仅应在代码不足以自行解释时使用XML注释吗? 我相信这是一个很好的示例,其中XML注释使漂亮的代码看起来很难看。需要上这样的课... public class RawMaterialLabel : EntityBase { public long Id { get; set; } …

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.