2016-04-15 67 views
0

我有3个类:服务,客户端和混乱(我应该以某种方式重构)。如何将变量关联到对象并返回它们?

Class Service { 

    void servicemethod(int a, int b, int c) 
    { 
     //does something with params a, b and c 
    } 
} 

我这就要求从相同的混乱两种方法的客户端类

Class Client { 

    main() 
    { 
     Mess.setABC(x) 
     Mess.callintermediatemethod(int x) 
    } 
} 

残局类什么也不做,但读PARAMS A,B和C,这与键“X”相关的值在一个文件中,并且调用Service.servicemethod(a, b, c)

Class Mess { 

    static void setABC(int x) 
    { 
     //sets static params a, b and c with values read from json file that has x as its key 
    } 

    void callIntermediatemethod(x) 
    { 
     Service.servicemethod(a, b, c); 
     //here x parameter is not even necessary since it already knows what A, B and C are. 
    } 
} 

很明显,Mess类做了两件事。在读取x之后设置静态变量,并使用存储的值调用service方法,并使用伪参数。这显然是糟糕的设计。但是,如果我决定消除混乱,如何设置参数a,b,c给定变量x?我应该将它们与对象关联吗?装饰他们?使用构建器模式还是依赖注入?如何清理混乱并让客户端类直接调用服务方法而不必通过Mess?

+0

除非您有一个令人信服的理由证明静态需求,否则您应该更喜欢使用非静态方法和类实例变量。一般来说,你对Mess课程有什么不好的设计。花一些时间阅读并利用面向对象的设计。 – pczeus

回答

0

从你写的,你只使用静态方法。您应该使用beans与依赖注入框架(如spring)。你可能需要一个包含ABC的类。创建一个特定的bean用于读取将从您的x返回ABC的XML。那么你应该直接打电话给你的Service.servicemethod(myAbc);

因此,这将不会停喜欢(我用类和对象不同的名称,你也应该这么做,因为它是一点点在你的伪代码混淆):

public class Client{ 

    @Service("myXmlReader") //Spring service annotation 
    MyXmlReader xmlRdr; 

    @Service("myService") 
    MyService srvce; 

    int main(){ 
     int x = 12; 
     MyABC abc= xmlRdr.readAbcFromX(x); 
     srvce.serviceMethod(abc); 
    } 
    public class MyABC(){ //Shouldn't be an inner class but you get the idea 
    int a; int b; int c; 
    //getters and setters ... 
    } 
} 

这就是一个例子,这就是我对当前项目的看法,但它不必如此复杂。例如,您可能只需要将MyXmlReader作为一个单例,或者只是将其作为一个new,具体取决于它的功能和需求。 MyService同样的事情。所以你不需要使用Spring。

依赖注入是你需要的,但首先你需要从你的混乱中分离逻辑,然后在需要时使用每个单元(哪个类从文件读取,从数据库读取,写入文件,处理业务逻辑,只包含数据,从外部调用等)。

您还提到了“如何设置上下文参数a,b,c给定变量x”,这非常模糊。为什么b c会与上下文链接?

+0

a,b,c是与x关联的参数。 “上下文”一词是字面用法。删除。 :) – Tania

相关问题