有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何避免在多个地方对同一事物使用可能很长的if语句

我正在创建一个应用程序,在前端我检查用户是管理员、用户、版主还是超级管理员。基于此,我创建了一个不同的XML

因此,我目前要做的是在方法参数中传递一个字符串,将对象转换为XML,以指定它应该使用的映射。然而,传递这些字符串是不好的。有没有更好的模式

我可以将角色检查带到映射类,然后将映射id更改为与当前用户的角色相同。但我认为安全检查不适合这些类别

您是否只需要创建一个枚举来保留角色并传递它而不是字符串

或者创建不同的类并使用工厂返回正确的对象


共 (2) 个答案

  1. # 1 楼答案

    通用接口方法

    通过在所有返回对象之间实现公共接口,可以在代码中开发一些loose coupling。例如:

    public interface XmlReturn
    {
         public void displayXML(); // Just an example method.
    }
    

    以及实现此接口的类:

    public class AdminXmlReturn implements XmlReturn
    {
         public void displayXML() { // Some code here for the admin XML }
    }
    

    使用此选项,您可以生成某种类型的工厂,该工厂采用鉴别器:

    public abstract class XmlFactory 
    {
         public static XmlReturn getInstance(String type)
         {
             // Using string as an example type. Doesn't need to be.
             if(type.equals("Admin")) {
                  return new AdminXmlReturn();
             }
         }
    }
    

    通过按对象的接口类型引用对象,可以生成任意多个不同的XML文件,而无需更改任何代码。即:

    public void loadPage(String permission)
    {
        // permission can be any type. This is just an example.
        XmlReturn xml = XmlFactory.getInstance(permission);
        xml.displayXML();
        // This method exists in all objects that implement XmlReturn
    }
    

    优势

    这种方法的主要优点是,您可以添加任意数量的新XML文件和权限,并且无需更改加载XML的代码。这种“关注点分离”将帮助您使您的程序非常易于管理和扩展

    通过将决策逻辑移植到工厂,您可以帮助提高代码的可读性,并允许其他人从程序内部工作的细节中抽象出来,如果您打算共享代码的话

  2. # 2 楼答案

    你的问题不是很清楚。无论如何,我试着给出一些选择:

    1. 如果您想将不同类型的用户序列化为XML,那么我建议将不同类型的用户建模为类的层次结构,并在每个类中使用专门的toXML()序列化方法。顺便说一下,如果这是您想要做的,JAXB可以帮助您很多

    2. 如果您有一个类XMLBuilder编写一些XML,并且XML的构建方式取决于用户的类型,那么我建议您使用类的层次结构对不同类型的用户进行建模,然后在XMLBuilder中使用方法重载,也就是说,有几个build()方法,每一个方法都将用户种类层次结构的不同子类作为输入

    我希望这有帮助