Loading ...
Sorry, an error occurred while loading the content.
 

Re: [id-php] Re: One To Many ORM di CI

Expand Messages
  • MSulchan Darmawan
    On Mon, 1 Feb 2010 08:40:00 +0100 ... Sip, sudah terang sekarang :D -- Cheers, [-Sulchan-] claws-mail 3.7.5 @ hardy heron 8.04.3 LTS y!m : bleketux [Non-text
    Message 1 of 45 , Feb 1, 2010
      On Mon, 1 Feb 2010 08:40:00 +0100
      Arthur Purnama <porky@...> wrote:

      > Iya betul. interface dalam contoh gue disini adalah komunikasi antar
      > layer dalam aplikasi, atau antar developer yang bertanggung jawab
      > atas layer tersebut. bukan dalam organisasi tim kerja.

      Sip, sudah terang sekarang :D

      --
      Cheers,
      [-Sulchan-]
      claws-mail 3.7.5 @ hardy heron 8.04.3 LTS
      y!m : bleketux


      [Non-text portions of this message have been removed]
    • didienna
      Bang ORM PHP yang gak perlu PDO Driver ada gak ya?
      Message 45 of 45 , Feb 2, 2010
        Bang ORM PHP yang gak perlu PDO Driver ada gak ya?

        --- In id-php@yahoogroups.com, Agus Suhartono <agus.suhartono@...> wrote:
        >
        > penjelasan om Arthur di bawah sudah sangat jelas
        >
        > saya akan menambahkan hal menarik di PHP mengenai masalah ini
        >
        > PHP merupakan dinamic language,
        > sehingga tanpa Interface kita bisa mengimplementasikan kode om Arthur
        > langsung buat method saja
        >
        > kalau untuk validasi
        > implementasi Interface dengan instanceof
        > maka untuk non Interface bisa dengan method_exists()
        >
        > tapi interface memang digunakan untuk membuat desain aplikasi yang lebih baik
        > alur program menjadi lebih mudah dibaca
        > interface juga disarankan untuk type hint (di parameter)
        >
        > kalau kita belajar design pattern,
        > interface menjadi sesuatu uang utama
        > lebih-lebih observer pattern
        >
        > agus
        >
        >
        >
        > 2010/1/29 Arthur Purnama <porky@...>:
        > > Gini bro... contoh aja...
        > >
        > > misal ya... lo musti bikin bisnis model, gue musti bikin bisnis logik.
        > > katakanlah, gue musti bikin bisnis logik yang musti bikin invoice rekening
        > > telepon. inputnya digampangin aja user id sama jumlah pulsa bulan ini.
        > > setelah ngobrol ngalor ngidul sama domain expert kita dapet bayangan bahwa
        > > ada beberapa bisnis entity misalnya
        > > client, contract, address dan invoice.
        > >
        > > so supaya elo ma gue bisa sama2 mulai. kita ngedefinisiin dulu interface
        > > nya.
        > > misal client ada nama dan nomer client. karena kebutuhan gue nanti cuma
        > > mengambil informasi, maka di interfacenya di definisiin get methode nya aja
        > >
        > > interface IClient{
        > >    public function getName();
        > >    public function getNumber();
        > > }
        > >
        > > begitu juga contract dan address dan invoice. misal
        > >
        > > interface IContract{
        > >   public function getNumber();
        > >   public function getType();
        > >   public function getBasicFee();
        > >   public function getUnitPrice();
        > > }
        > >
        > > interface IAddress{
        > >   public function getAddress();
        > >   public function getPostalCode();
        > >   public function getCity();
        > >   public function getCountry();
        > > }
        > >
        > > interface IInvoice(){
        > >   public function getClient();
        > >   public function getAddress();
        > >   public function getContract();
        > >   public function getDate();
        > >   public function getNumber();
        > >   public function getTotal();
        > > }
        > >
        > > Kalo ini udah di definisikan, elo bisa mulai, gue juga bisa mulai. kita bisa
        > > mulai bareng2, kenapa? karena acuan kita ya interface ini. gue ga peduli lo
        > > implementasinya gimana, itu tersera elo, dan urusan elo. gue taunya methode
        > > itu harus ada di objectnya nanti. begitu juga elo, ga peduli tar gue gimana
        > > makenya. pokoknya methode itu ada di kelas elo.
        > >
        > > misalnya yang client
        > >
        > > class Client implements IClient{
        > >
        > >    private $name;
        > >    private $number;
        > >
        > >    public function setName($name){
        > >        $this->name = $name;
        > >    }
        > >
        > >   public function getName(){
        > >       return $this->name;
        > >   }
        > >
        > >   public function setNumber($number){
        > >       $this->number = $number;
        > >   }
        > >
        > >   public function getNumber(){
        > >      return $this->number;
        > >   }
        > > }
        > >
        > > begitu juga address, contract dan invoice. katakanlah bisnis modelnya
        > > contract sedemikian rupa, dimana lo harus membuat beberapa variasi dari
        > > entity contract. misalnya
        > >
        > > class ContractStandard implements IContract{
        > >    //member variabel
        > >   //getter and setter
        > > }
        > >
        > > class ContractISDN implements IContract{
        > >    //member variabel
        > >   //getter and setter
        > > }
        > >
        > > class ContractVoIP implements IContract{
        > >    //member variabel
        > >   //getter and setter
        > > }
        > >
        > > abis gitu lo bikin entityfactory nya misal
        > >
        > > class EntityFactory{
        > >    public static function getClientById($clientId){
        > >        //ambil informasi dari database
        > >       $client = new Client();
        > >       $client->setName($nameFromDatabase);
        > >       $client->setNumber($numberFromDatabase);
        > >    }
        > >
        > >    public static function getContractByClientId($clientId){
        > >        //ambil informasi dari database
        > >        switch($contractVariant){
        > >             case VARIANT_ISDN:
        > >                    $contract = new ContractISDN();
        > >                    break;
        > >             case VARIANT_VOIP:
        > >                     $contract = new ContractVoIP();
        > >                     break;
        > >             default:
        > >                     $contract = new ContractStandard();
        > >                     break;
        > >        }
        > >        //sets value
        > >    }
        > >
        > >    public static function getAddressByClientId($clientId){
        > >       //idem :D
        > >    }
        > > }
        > >
        > > kalo lo liat contoh entity factory diatas, loe bisa liat bahwa pada contract
        > > bisa terjadi beberapa kemungkinan, mungkin karena bisnis modelnya yang
        > > mengharuskan begitu. tapi gue nanti gak peduli. karena semua object itu
        > > implements IContract interface. jadi methode2 yang gue butuh pasti ada.
        > >
        > > so sekarang bisnis logik gue misal:
        > >
        > > class Service{
        > >
        > >    public static function generateInvoice($clientId, $unitAmount){
        > >
        > >        $invoice = new Invoice();
        > >
        > >        $client = EntityFactory::getClientById($clientId);
        > >        if(! ($client instanceof IClient) ){
        > >             throw new InvalidObjectException();
        > >        }
        > >
        > >        $invoice->setClient($client);
        > >
        > >        $address = EntityFactory::getAddressByClientId($clientId);
        > >        if(! ($client instanceof IAddress) ){
        > >             throw new InvalidObjectException();
        > >        }
        > >
        > >        $invoice->setAddress($address);
        > >
        > >        $contract = EntityFactory::getContractByClientId($clientId);
        > >        if(! ($contract instanceof IContract) ){
        > >             throw new InvalidObjectException();
        > >        }
        > >
        > >        //compute total price
        > >        $total = $contract->getUnitPrice() * $unitAmount;
        > >
        > >        $invoice->setTotal($total);
        > >
        > >        return $invoice;
        > >
        > >    }
        > >
        > > }
        > >
        > > seperti yang lo liat gue mencoba untuk recheck apakah bener object tersebut
        > > adalah implementasi dari interface x ... check pake instanceof itu
        > > sebenarnya hanya mekanisme keamanan saja. gue bisa saja langsung
        > > $contract->getUnitPrice() dan php interpreter bakal protes kalo methode itu
        > > gak ada atau variabel tersebut bukan object.
        > >
        > > kira2 dapat pencerahan gak?
        > >
        > > Mit freundlichen Grüßen
        > > Arthur Purnama
        > >
        > > http://arthur.purnama.de
        > >
        > >
        > >
        > >
        > > 2010/1/29 MSulchan Darmawan <bleketux@...>
        > >
        > >>
        > >>
        > >> On Thu, 28 Jan 2010 15:06:26 +0100
        > >> Arthur Purnama <porky@... <porky%40programmer.net>> wrote:
        > >>
        > >> > apabila kerjanya dibagi yang bener, misalnya yang satu fokus ke
        > >> > database, yang satu fokus ke ui, yang satu fokus ke bisnis logic,
        > >> > yang satu fokus ke service. dan satu sama lain komunikasi lewat
        > >> > interface, pasti gak akan pusing kalo ada apa2.
        > >>
        > >> Yang dimaksud dengan komunikasi lewat interface ini apa ya mas Arthur ?
        > >> Mohon pencerahan...
        > >>
        > >> --
        > >> Cheers,
        > >> [-Sulchan-]
        > >> claws-mail 3.7.4 @ hardy heron 8.04.3 LTS
        > >> y!m : bleketux
        > >>
        > >>
        > >> [Non-text portions of this message have been removed]
        > >>
        > >>
        > >>
        > >
        > >
        > > [Non-text portions of this message have been removed]
        > >
        > >
        > >
        > > ------------------------------------
        > >
        > > Yahoo! Groups Links
        > >
        > >
        > >
        > >
        >
      Your message has been successfully submitted and would be delivered to recipients shortly.