2013-05-09 31 views
0

我正在创建一个应用程序,并在前台检查用户是管理员,用户,主持人还是superadmin。基于此,我创建了一个不同的XML。如何避免可能长时间的同一事物多个地方的语句

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

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

你只是创建一个枚举来保持角色,并通过它而不是字符串?

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

+0

请给我们一些代码。 – 2013-05-09 09:16:19

+0

很难理解你在问什么。将对象转换为XML - 哪个对象,字符串?用户?这里需要更多的细节来说明你想要做什么。 – Rand 2013-05-09 09:18:52

回答

3

一个共同的接口方法

通过实施所有返回的对象之间的通用接口,可以开发一些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文件,而无需更改任何代码。 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。这种“关注点分离”将帮助您使程序非常易于管理和扩展。

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

+1

用户希望避免使用长if-else代码的解决方案。你可以结合这个答案和这个:http://stackoverflow.com/questions/3434466/creating-a-factory-method-in-java-that-doesnt-rely-on-if-else – gouki 2013-05-09 09:49:01

0

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

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

  2. 如果您有一个类XMLBuilder写入一些XML,并且XML的构建方式取决于用户的类型,那么我会建议使用类层次结构来为不同类型的用户建模,然后使用方法在XMLBuilder中超载,即有几个build()方法,每个方法都将用户类别层次结构的不同子类作为输入。

我希望这有助于。