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

标签 java spring jakarta-ee

我正在创建一个应用程序,并在前面检查用户是否是管理员、用户、版主或 super 管理员。在此基础上我创建了一个不同的 XML。

所以我当前所做的就是在方法参数中传递一个字符串,将对象转换为 XML,以指定它应该使用哪个映射。然而,传递这些字符串并不好。有什么模式可以做得更好吗?

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

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

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

最佳答案

通用接口(interface)方法

通过在所有返回对象之间实现通用接口(interface),您可以开发一些 loose coupling在你的代码中。例如:

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

以及实现此接口(interface)的类:

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();
         }
     }
}

通过通过对象的接口(interface)类型引用该对象,您可以生成任意数量的不同 XML 文件,而无需更改任何代码。 IE:

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 的代码。这种“关注点分离”将帮助您使您的程序变得非常易于管理和扩展。

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

关于java - 如何避免在多个地方对同一事物进行可能很长的 if 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16458181/

相关文章:

java - 在 spring 中使用值注释更新读取的值

java - 无限检查自定义 JSR303 注释

java - REST API 设计查询 2

java - PDU.TRAP 与 PDU.SET snmp4j

java - 当嵌套类与封闭类的静态成员共享名称时,访问嵌套类的静态成员?

java - Autowiring 抽象组件

spring - Spring Boot启动后,Kafka主题未在远程kafka上自动创建(并在本地kafka服务器上创建)

java - HibernateTemplate 复合键获取值 null

java - Spring 启动: Token authentication(bearer) in request headers in rest api when token also comes from calling another api

java - 将两个 jUnit 测试用例合并为一个