代码之家  ›  专栏  ›  技术社区  ›  aerojas

设计模式:Java EE Web方法必须遵循一系列内部方法,但如何实现呢?

  •  0
  • aerojas  · 技术社区  · 7 年前

    假设我有一个管理书籍的Web服务。所以我有这样的Web方法 createBook , readBook , editBook 等。对于每个Web方法,我正在寻找一种需要按特定顺序调用某些函数的设计,例如 checkPermissions 然后 validateInput 然后 execute 等等问题是,由于它们是Web方法,我不知道是否有任何设计模式可以应用于它们-我知道我可以使用类和模板模式来解决它,但如果有一个完整的类来实现一个Web方法,看起来会很奇怪。

    我尝试这样做是为了正确重构我的Web方法。目前,每个Web方法实现都必须确保(手动而非设计)遵循顺序,并且在所有Web方法中重复一些代码行,并且一些方法在方法代码中执行验证过程,导致方法很长,执行检查的行比执行实际工作的行多,并且看起来很难看和混乱。

    也许我唯一的解决方案是尝试识别重复的代码,并将其从我的Web方法代码中移除(无法对其强制结构)。

    有没有办法重新组织我的Web方法?

    提前通知你。

    1 回复  |  直到 7 年前
        1
  •  1
  •   davidxxx    7 年前

    模板模式是一个好主意。

    但是要实现整个类看起来很奇怪 一个Web方法。

    不,不会的。您有一个要在不同情况下应用的通用算法。web方法是一个技术层。
    不要将重点放在it上来设计其实现。

    拆分在不同类中呈现相同骨架算法的webservice的每个方法的逻辑,这些类都将是模板基类的子类,并在模板基类中定义所有webservice方法的常见行为。

    抽象模板类:

    public abstract class BookProcessing {
        public void action() {
            checkPermissions();
            commonProcessing(); // if required. To not repeat code
            validateInput();
            execute();        
        }
    
        public abstract void checkPermissions();
        public abstract void validateInput();
        public abstract void execute();
    
        private void  commonProcessing(){
            // define common processing if required
        }
    }
    

    子类:

    public class CreateBookProcessing extends BookProcessing {        
    
        public void checkPermissions(){
             ...
        }
        public void validateInput(){
             ...
        }
        public void execute(){
             ...
        }
    
    }
    
    推荐文章