SERPland Blog

Template Method Pattern implemented in PL/SQL

· 564 words · 3 minutes to read

Design Pattern are great! Not just in Java or C#

The Template Method Pattern can also be implementet with Oracle’s PL/SQL language (using clean Object Types). 🔗

The Template Method Design Patterns is probalby one of the most widely used and useful design pattern. common example of this is when writing a program that will handle data using various detail algorithms. The abstract Class would have a method called the “Template” Method which contains the main program logic. There also exists “helper method"s in the class, which are specified by any class that inherits from it. So the abstract class defines the main logic. The subclasses itself implement the details logic. So every developer can implement his specific details without changing the main logic.

English Deutsch/German

|

|

In PL/SQL this design pattern can be implementet the procedural way as been done by Lucas Jellema (Amis.nl) Here I created a PL/SQL sample with Object Types:

e>


Update 2024

Template Method Pattern implemented in PL/SQL 🔗

Der Template Method Pattern ist ein Designmuster, das auch in der Oracle PL/SQL-Sprache implementiert werden kann. Es handelt sich um eines der am weitesten verbreiteten und nützlichsten Designmuster. Ein häufiges Beispiel hierfür ist die Erstellung eines Programms, das Daten mit verschiedenen Detailalgorithmen verarbeitet. Die abstrakte Klasse enthält eine Methode namens Template Method, die die Hauptprogrammlogik enthält. Es gibt auch Hilfsmethoden, die von allen spezifiziert sind, die von ihr erben. Die abstrakte Klasse definiert also die Hauptlogik, während die Unterklassen die Detaillogik implementieren.

In PL/SQL kann dieses Designmuster auf prozedurale Weise implementiert werden, wie es Lucas Jellema auf Amis.nl getan hat.

drop type adress_o;
drop type adress_abstract_o;
more adress_abstract_o;

create or replace type adress_abstract_o as object (
    PersId number,
    member procedure setPersId(pPersId in number),
    member function getPersId return number,
    member function getMainResult return number,
    member function doSomethingA return number,
    member function doSomethingB return number
) not final not instantiable;

create or replace type body adress_abstract_o as
    -- Setters & Getters
    member procedure setPersId(pPersId in number) is
    begin
        self.PersId := pPersId;
    end;
    
    member function getPersId return number is
    begin
        return self.PersId;
    end;
    
    -- Main Template Method
    member function getMainResult return number is
    begin
        return doSomethingA + doSomethingB;
    end;
    
    -- Private methods supporting the template method
    -- can be overridden by subclass methods
    member function doSomethingA return number is
    begin
        return 0;
    end;
    
    member function doSomethingB return number is
    begin
        return 0;
    end;
end;
/

create or replace type adress_o under adress_abstract_o
(OVERRIDING member function doSomethingA return number,
OVERRIDING member function doSomethingB return number
) final instantiable;

create or replace type body adress_o as
    -- Private methods overriding the adress_abstract_o
    OVERRIDING member function doSomethingA return number is
    begin
        return 0;
    end;
    
    OVERRIDING member function doSomethingB return number is
    begin
        return 0;
    end;
end;

-- Testcase on adress_o
declare
    a adress_o;
    p number;
begin
    a := adress_o();
    dbms_output.put_line('PersId: ' || a.getPersId);
    dbms_output.put_line('Adresse: ' || a.getMainResult);
end;

Im Jahr 2024 ist das Template Method Pattern immer noch ein grundlegendes Designmuster, das in der Oracle PL/SQL-Programmierung verwendet werden kann. Es ermöglicht eine klare Trennung zwischen Hauptprogrammlogik und Detailimplementierungen in Unterklassen. Durch die Verwendung von Objekttypen können Entwickler ihr spezifisches Detailverhalten implementieren, ohne die Hauptlogik ändern zu müssen.

Die Implementierung des Template Method Patterns in PL/SQL bietet nach wie vor eine effektive Möglichkeit, die Wartbarkeit und Erweiterbarkeit von Programmen zu verbessern. Es ermöglicht eine einfachere Handhabung von komplexen Datenverarbeitungsalgorithmen und trägt zur Schaffung gut strukturierter und klarer Codebasen bei.