Laravel reusable functions











up vote
0
down vote

favorite












I am using Repository design pattern and I have a function generateBarcode() this function just do some logic and insert data in database.



I am calling this function in more one function and more that one repository to generate a new Barcode.




Question is:




What is the best way to make this function reusable?




  1. Helpers


But I don't think this is a good idea since it am dealing with database.




  1. Events


Firing event and storing the result.
$barcode = event(new NewBarcodeRequired())



That what I am doing right now and data is returned as an array



Also I don't think that is a good idea because I have read that events shouldn't return data.




  1. Repository


Create a new repository for this function but I think it is a very bad idea because I won't create a class for every reusable function that I have.










share|improve this question
























  • what about traits ?
    – Anar Bayramov
    Nov 20 at 1:50










  • @AnarBayramov So I will have to create a class for this single function?
    – Ahmed essam
    Nov 20 at 1:53






  • 1




    why cant you have a class for single function ?
    – Anar Bayramov
    Nov 20 at 1:55










  • A trait seems like a good option if the code in each repository is similar. That way you can define the function once and use it in all the repositories where you need to generate barcodes. It doesn't matter if there is only one function in the trait.
    – newUserName02
    Nov 20 at 2:33












  • @newUserName02 why shouldn't i use event in this case? I could simple create a new product and fire and event to generate the code then store that event result in a variable and assign it to the created product
    – Ahmed essam
    Nov 20 at 11:43















up vote
0
down vote

favorite












I am using Repository design pattern and I have a function generateBarcode() this function just do some logic and insert data in database.



I am calling this function in more one function and more that one repository to generate a new Barcode.




Question is:




What is the best way to make this function reusable?




  1. Helpers


But I don't think this is a good idea since it am dealing with database.




  1. Events


Firing event and storing the result.
$barcode = event(new NewBarcodeRequired())



That what I am doing right now and data is returned as an array



Also I don't think that is a good idea because I have read that events shouldn't return data.




  1. Repository


Create a new repository for this function but I think it is a very bad idea because I won't create a class for every reusable function that I have.










share|improve this question
























  • what about traits ?
    – Anar Bayramov
    Nov 20 at 1:50










  • @AnarBayramov So I will have to create a class for this single function?
    – Ahmed essam
    Nov 20 at 1:53






  • 1




    why cant you have a class for single function ?
    – Anar Bayramov
    Nov 20 at 1:55










  • A trait seems like a good option if the code in each repository is similar. That way you can define the function once and use it in all the repositories where you need to generate barcodes. It doesn't matter if there is only one function in the trait.
    – newUserName02
    Nov 20 at 2:33












  • @newUserName02 why shouldn't i use event in this case? I could simple create a new product and fire and event to generate the code then store that event result in a variable and assign it to the created product
    – Ahmed essam
    Nov 20 at 11:43













up vote
0
down vote

favorite









up vote
0
down vote

favorite











I am using Repository design pattern and I have a function generateBarcode() this function just do some logic and insert data in database.



I am calling this function in more one function and more that one repository to generate a new Barcode.




Question is:




What is the best way to make this function reusable?




  1. Helpers


But I don't think this is a good idea since it am dealing with database.




  1. Events


Firing event and storing the result.
$barcode = event(new NewBarcodeRequired())



That what I am doing right now and data is returned as an array



Also I don't think that is a good idea because I have read that events shouldn't return data.




  1. Repository


Create a new repository for this function but I think it is a very bad idea because I won't create a class for every reusable function that I have.










share|improve this question















I am using Repository design pattern and I have a function generateBarcode() this function just do some logic and insert data in database.



I am calling this function in more one function and more that one repository to generate a new Barcode.




Question is:




What is the best way to make this function reusable?




  1. Helpers


But I don't think this is a good idea since it am dealing with database.




  1. Events


Firing event and storing the result.
$barcode = event(new NewBarcodeRequired())



That what I am doing right now and data is returned as an array



Also I don't think that is a good idea because I have read that events shouldn't return data.




  1. Repository


Create a new repository for this function but I think it is a very bad idea because I won't create a class for every reusable function that I have.







php laravel repository-pattern






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 24 at 18:03









tereško

52.2k1976135




52.2k1976135










asked Nov 20 at 1:44









Ahmed essam

315




315












  • what about traits ?
    – Anar Bayramov
    Nov 20 at 1:50










  • @AnarBayramov So I will have to create a class for this single function?
    – Ahmed essam
    Nov 20 at 1:53






  • 1




    why cant you have a class for single function ?
    – Anar Bayramov
    Nov 20 at 1:55










  • A trait seems like a good option if the code in each repository is similar. That way you can define the function once and use it in all the repositories where you need to generate barcodes. It doesn't matter if there is only one function in the trait.
    – newUserName02
    Nov 20 at 2:33












  • @newUserName02 why shouldn't i use event in this case? I could simple create a new product and fire and event to generate the code then store that event result in a variable and assign it to the created product
    – Ahmed essam
    Nov 20 at 11:43


















  • what about traits ?
    – Anar Bayramov
    Nov 20 at 1:50










  • @AnarBayramov So I will have to create a class for this single function?
    – Ahmed essam
    Nov 20 at 1:53






  • 1




    why cant you have a class for single function ?
    – Anar Bayramov
    Nov 20 at 1:55










  • A trait seems like a good option if the code in each repository is similar. That way you can define the function once and use it in all the repositories where you need to generate barcodes. It doesn't matter if there is only one function in the trait.
    – newUserName02
    Nov 20 at 2:33












  • @newUserName02 why shouldn't i use event in this case? I could simple create a new product and fire and event to generate the code then store that event result in a variable and assign it to the created product
    – Ahmed essam
    Nov 20 at 11:43
















what about traits ?
– Anar Bayramov
Nov 20 at 1:50




what about traits ?
– Anar Bayramov
Nov 20 at 1:50












@AnarBayramov So I will have to create a class for this single function?
– Ahmed essam
Nov 20 at 1:53




@AnarBayramov So I will have to create a class for this single function?
– Ahmed essam
Nov 20 at 1:53




1




1




why cant you have a class for single function ?
– Anar Bayramov
Nov 20 at 1:55




why cant you have a class for single function ?
– Anar Bayramov
Nov 20 at 1:55












A trait seems like a good option if the code in each repository is similar. That way you can define the function once and use it in all the repositories where you need to generate barcodes. It doesn't matter if there is only one function in the trait.
– newUserName02
Nov 20 at 2:33






A trait seems like a good option if the code in each repository is similar. That way you can define the function once and use it in all the repositories where you need to generate barcodes. It doesn't matter if there is only one function in the trait.
– newUserName02
Nov 20 at 2:33














@newUserName02 why shouldn't i use event in this case? I could simple create a new product and fire and event to generate the code then store that event result in a variable and assign it to the created product
– Ahmed essam
Nov 20 at 11:43




@newUserName02 why shouldn't i use event in this case? I could simple create a new product and fire and event to generate the code then store that event result in a variable and assign it to the created product
– Ahmed essam
Nov 20 at 11:43












1 Answer
1






active

oldest

votes

















up vote
1
down vote



accepted










Traits could be a good option for this case. Which will give you flexibility to use in any of your class without requirement of class extension.




Traits are a mechanism for code reuse in single inheritance languages such as PHP. A Trait is intended to reduce some limitations of single inheritance by enabling a developer to reuse sets of methods freely in several independent classes living in different class hierarchies. The semantics of the combination of Traits and classes is defined in a way which reduces complexity, and avoids the typical problems associated with multiple inheritance and Mixins.



A Trait is similar to a class, but only intended to group
functionality in a fine-grained and consistent way. It is not possible
to instantiate a Trait on its own. It is an addition to traditional
inheritance and enables horizontal composition of behavior; that is,
the application of class members without requiring inheritance.




http://php.net/manual/en/language.oop5.traits.php






share|improve this answer





















    Your Answer






    StackExchange.ifUsing("editor", function () {
    StackExchange.using("externalEditor", function () {
    StackExchange.using("snippets", function () {
    StackExchange.snippets.init();
    });
    });
    }, "code-snippets");

    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "1"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });














    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53385078%2flaravel-reusable-functions%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes








    up vote
    1
    down vote



    accepted










    Traits could be a good option for this case. Which will give you flexibility to use in any of your class without requirement of class extension.




    Traits are a mechanism for code reuse in single inheritance languages such as PHP. A Trait is intended to reduce some limitations of single inheritance by enabling a developer to reuse sets of methods freely in several independent classes living in different class hierarchies. The semantics of the combination of Traits and classes is defined in a way which reduces complexity, and avoids the typical problems associated with multiple inheritance and Mixins.



    A Trait is similar to a class, but only intended to group
    functionality in a fine-grained and consistent way. It is not possible
    to instantiate a Trait on its own. It is an addition to traditional
    inheritance and enables horizontal composition of behavior; that is,
    the application of class members without requiring inheritance.




    http://php.net/manual/en/language.oop5.traits.php






    share|improve this answer

























      up vote
      1
      down vote



      accepted










      Traits could be a good option for this case. Which will give you flexibility to use in any of your class without requirement of class extension.




      Traits are a mechanism for code reuse in single inheritance languages such as PHP. A Trait is intended to reduce some limitations of single inheritance by enabling a developer to reuse sets of methods freely in several independent classes living in different class hierarchies. The semantics of the combination of Traits and classes is defined in a way which reduces complexity, and avoids the typical problems associated with multiple inheritance and Mixins.



      A Trait is similar to a class, but only intended to group
      functionality in a fine-grained and consistent way. It is not possible
      to instantiate a Trait on its own. It is an addition to traditional
      inheritance and enables horizontal composition of behavior; that is,
      the application of class members without requiring inheritance.




      http://php.net/manual/en/language.oop5.traits.php






      share|improve this answer























        up vote
        1
        down vote



        accepted







        up vote
        1
        down vote



        accepted






        Traits could be a good option for this case. Which will give you flexibility to use in any of your class without requirement of class extension.




        Traits are a mechanism for code reuse in single inheritance languages such as PHP. A Trait is intended to reduce some limitations of single inheritance by enabling a developer to reuse sets of methods freely in several independent classes living in different class hierarchies. The semantics of the combination of Traits and classes is defined in a way which reduces complexity, and avoids the typical problems associated with multiple inheritance and Mixins.



        A Trait is similar to a class, but only intended to group
        functionality in a fine-grained and consistent way. It is not possible
        to instantiate a Trait on its own. It is an addition to traditional
        inheritance and enables horizontal composition of behavior; that is,
        the application of class members without requiring inheritance.




        http://php.net/manual/en/language.oop5.traits.php






        share|improve this answer












        Traits could be a good option for this case. Which will give you flexibility to use in any of your class without requirement of class extension.




        Traits are a mechanism for code reuse in single inheritance languages such as PHP. A Trait is intended to reduce some limitations of single inheritance by enabling a developer to reuse sets of methods freely in several independent classes living in different class hierarchies. The semantics of the combination of Traits and classes is defined in a way which reduces complexity, and avoids the typical problems associated with multiple inheritance and Mixins.



        A Trait is similar to a class, but only intended to group
        functionality in a fine-grained and consistent way. It is not possible
        to instantiate a Trait on its own. It is an addition to traditional
        inheritance and enables horizontal composition of behavior; that is,
        the application of class members without requiring inheritance.




        http://php.net/manual/en/language.oop5.traits.php







        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Nov 21 at 2:07









        Anar Bayramov

        4,22442542




        4,22442542






























            draft saved

            draft discarded




















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.





            Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


            Please pay close attention to the following guidance:


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53385078%2flaravel-reusable-functions%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            Costa Masnaga

            Fotorealismo

            Sidney Franklin