Quando riutilizzo o creo un nuovo Builder

4

Ho implementato un Pattern Builder in un progetto su cui sto lavorando.

Sto usando questo modello di progettazione per creare campi e componenti (div, tabelle, pannello (boostrap)).

Quindi ho una classe Component Director. Fa un ordine per un costruttore (in questo caso InputComponentBuilder)

class @DirectorComponent

    @builder = null

    @make = (args...)->
        @builder.make.apply(@builder, args)
        @setResult(result = @builder.getResult())
        return result

    @makeInput = (name, properties)->
        @builder = new InputComponentBuilder()
        return @make.apply(@, arguments)

Sorgente di InputComponent Builder

class @InputComponentBuilder extends Builder

    constructor : ()->
        @input = new InputComponent()

    make : (name, properties)->
        @input.extend(properties)
        @input.setName(name)
        obj = $("<input />")
        obj.attr("name", name)
        obj.val(@input.value)
        if @input.placeholder
            obj.attr("placeholder", @input.placeholder)
        obj = BuilderHelper.applyProperties(@input, obj)
        obj = BuilderFieldHelper.applyProperties(@input, obj)
        @input.setObject(obj)
        @setResult(@input)
        return @input

InputComponentBuilder è per campi di input generici. Quindi se voglio creare campi specifici come (EmailField, ZipCodeField .. etc) avrò bisogno di creare un altro builder esteso a InputComponetBuilder ? o in classe Director Dovrò creare un altro metodo makeZipCodeField e cambiare la ricetta inviata a InputBuilder?

Base Class (classe Base del risultato di Class Builder)

class @Component

    constructor : ()->
        @id = null
        @name = ""
        @obj = null
        @attrs = {}
        @classes = []
        @css = {}

    extend : (data)->
        $.extend(@, data)

    getObject : ()->
        return @obj

    setObject : (obj)->
        @obj = obj

    setName : (name)->
        @name = name

    getName : ()->
        return @name

    getPropertiesFromObjectComponent : (args...)->
        result = []
        console.log(args, arguments)
        for key, arg of args
            console.log key, arg
            result.push(if arg of @ then @[arg] else null)
        console.log(result)
        return result

Classe astratta per campi

class @FieldComponentAbstract extends Component
    constructor : ()->
        super
        @label = null
        @placeholder = null
        @onclick = null
        @onchange = null
        @onfocus  = null
        @onkeypressed = null
        @onkeyup = null
        @onkeydown = null
        @oninsertednode = null
        @bootstrap = null
        @onblur = null
        @mask = null

    @validate : ()->
        return true

Classe InputComponent

    class @InputComponent extends FieldComponentAbstract

        constructor : ()->
            super
            @type = "text"
            @value = ""

Chiamata makeInput

@cpf_field = DirectorComponent.makeInput('cpf',
                placeholder: "CPF",
                mask : '999.999.999-99'
                bootstrap: true
            )
    
posta Guilherme Soares 10.12.2014 - 16:59
fonte

1 risposta

1

Per rispondere alla tua domanda originale (nel titolo), un Builder è per definizione un oggetto molto statico, quindi dopo aver eseguito la "build" finale e ottenuto l'oggetto costruito, il Builder viene scartato, mai riutilizzato.

    
risposta data 27.03.2015 - 14:50
fonte

Leggi altre domande sui tag