选项类型变量的常见命名约定以及返回它们的方法 [已关闭]

2022-09-03 02:39:46

有哪些常用的方法来命名选项类型变量和返回选项类型的方法,以便将它们与非选项对应项区分开来?

假设一个DAO当前有一个返回实体或null实例的方法,如果我们弃用该方法并添加一个返回选项类型的方法,我们应该如何命名它?findById

现在假设我们正在重构代码以使用此新方法,我们不想用选项类型替换对实体变量的所有引用,我们应该如何命名选项类型变量?

interface Dao<ENTITY ,ID> {
   @Deprecated
   ENTITY findById(ID id);

   //What naming convention should we use?
   Optional<ENTITY> maybeFindById(ID id);
}

public class MyService {
    PersonDao personDao;

    public void changeAge(final Long id,final int age) {

    //final Person person = personDao.findById(id);
    //if(person !=null)

    //What naming convention should we use?
    final Optional<Person> maybePerson = personDao.maybeFindById(id);

   if (maybePerson.isPresent()){
       final Person person = maybePerson.get();
       person.setAge(age);
    }
}

答案 1

我不认为在这里有两种不同的方法是一个好主意。如果对迁移有疑问,请保留旧的。

但是有一种方法可以通过两个步骤重构整个代码:

首先,将接口从以下位置更改:

interface Dao<ENTITY ,ID> {
   ENTITY findById(ID id);
}

自:

interface Dao<ENTITY ,ID> {
   default ENTITY findById(ID id) { return newFindById(id).orElse(null); }
   Optional<ENTITY> newFindById(ID id);
}

我从你的问题中假设调整接口的实现不是问题。现在,告诉您的重构工具内联旧的,现在的方法。defaultfindById

其次,将方法重命名为 。newFindByIdfindById

通过这种方式,您已将interface

interface Dao<ENTITY ,ID> {
   Optional<ENTITY> findById(ID id);
}

而所有呼叫站点都已从以下位置更改:

Person maybePerson = personDao.findById(id); // may be null

自:

Person maybePerson = personDao.findById(id).orElse(null);

这样,您首先就可以进行清理,而其他代码则适应了以前的工作方式。然后,您可以逐个浏览呼叫站点,并决定是否以及如何更改它们。这可能需要一些时间,但由于已经很干净并且解决了命名约定问题,因此无需着急。interfaceinterface

请注意,您的示例方法应如下所示:

public void changeAge(final Long id,final int age) {
    personDao.findById(id).ifPresent(person -> person.setAge(age));
}

请注意,在重构的旧代码和新代码这两种形式中,都不需要命名类型的变量,因此不需要命名约定。Optional

当然,重构需要一个支持 Java 8 的工具。


答案 2

我认为这确实是一个非常基于意见的问题,因为真的不可能有任何权威或正确的答案。

也就是说,我倾向于只命名正常返回的方法,例如.该方法实际上与可以返回表示“无结果”的方法没有什么不同,只是返回类型使其更加明确。OptionalOptional<Foo> findById(Id id)null

至于变量,我倾向于像...但总的来说,我认为你如何命名局部变量(甚至字段)比你如何命名一个方法重要得多。OptionaloptionalFoo


推荐