清洁API设计

kuk*_*das 5 java coding-style

哪种设计API更好:

Example A:
public class UserService {
  public void addUser(final User user);
  public void addUserToIndex(final User user, final int index);
  public User lookUpUser(final User user);
  public User getUserByIndex(final int index );
  public void removeUser(final User user);
  public List<User> getAllUsers();
}

Example B:
public class UserService {
  public void add(final User user);
  public void add(final User user, final int index);
  public User lookUp(final User user);
  public User get(final int index);
  public void remove(final User user);
  public List<User> getAll();
}
Run Code Online (Sandbox Code Playgroud)

显然这段代码不会运行 - 它应该只显示问题.我更喜欢第二种方法.方法名称可能有点通用,但上下文(className,parameter,return Type)使它非常清楚.第二种方法可能存在的一个问题是,如果我需要另一个具有相同类型的get方法会发生什么.例如,如果我想按年龄获得用户.在此先感谢您的帮助.

裤裤

Chs*_*y76 3

您需要回答两个主要问题以使您的选择更加容易:

  1. 您是否绝对 100% 确定您永远不会与多个实体达成这项服务协议?

    换句话说,是否存在这样的场景:UserService会有额外的方法,例如getRoles()?如果答案是肯定的,那么您肯定会选择选项 A

  2. 如果您肯定要为每个服务拥有一个实体,那么您是否需要每个服务的接口,还是更愿意使用通用的通用接口

    所以,你可以用类似的东西来代替你的选项B

    public class Service<T> {
        public void add(final T entity);
        public void add(final T entity, final int index);
        public T lookUp(final T entity);
        public T get(final int index);
        public void remove(final T entity);
        public List<T> getAll();
    }
    
    Run Code Online (Sandbox Code Playgroud)

    需要更具体功能的具体服务可以扩展此通用服务。