Very excited by this idea. Lot's to think about. We're on board with most of it and are ready to help.
Cheers, Brendan On Tue, Apr 10, 2018 at 9:30 AM, Jonathan Druart < jonathan.dru...@bugs.koha-community.org> wrote: > Ha, found it! > https://gitlab.deichman.no/digibib/Koha/commits/circ_rewrite_master > I was looking at the digibib github repo! > > > On Tue, 10 Apr 2018 at 13:28 Jonathan Druart <jonathan.dru...@bugs.koha- > community.org> wrote: > >> Hi Benjamin, >> >> Where is the code of the "working example"? >> >> Cheers, >> Jonathan >> >> On Tue, 10 Apr 2018 at 12:04 Benjamin Rokseth < >> benjamin.roks...@deichman.no> wrote: >> >>> Community hackers, >>> >>> on hackfest I got introvertly enthusiastic about the concept of a Koha >>> Core, and >>> about time I shared some thoughts. >>> >>> Background: Deichman (Oslo Public Library) is heavily leaning on >>> bleeding edge Koha >>> development (REST, Objects, Auth, NCIP and such) and, like at least some >>> others, maintain >>> a lot of local patches to tweak Koha into our users needs. Some are >>> probably interesting to >>> Community, others not. Now to keep everything in sync with Community >>> would be amazing, >>> but not likely to happen anytime soon. >>> >>> Great work has been done on refactoring Koha (new namespace, Koha >>> Objects and REST api, etc.), >>> but we'd like to suggest one more - a Koha core. >>> The idea is simple: borrow from object oriented languages, java, or >>> actually more ruby, since >>> we're dealing with a dynamic language, use class/module inheritance and >>> method overrides. >>> Perl has the "use parent" concept which simplifies >>> inheritance/subclassing and allows for >>> nested overrides. >>> >>> As an example we refactored the current circulation in Koha, since this >>> for us is the core >>> functionality that we depend on and need to hook our local quirks on top >>> of. >>> An attempt to illustrate: >>> >>> +------------+ >>> | Core::Main | >>> +--^---------+ >>> | >>> +--+----------------+ >>> | Core::Prefs | >>> | Core::Exceptions | +-----------------------+ >>> | Core::Circulation <-----+------+---| Deichman::Circulation | >>> | ... | | | +---^-------------------+ >>> +-------------------+ | | | >>> | | | >>> +------------------+------+ +--------------------------+ >>> | Core::Circulation::SIP | |Deichman::Circulation::SIP| >>> +------------------------------------------------------------+ >>> | use parent qw( >>> | Deichman::Circulation >>> +----------------------+ Core::Circulation::SIP >>> | Core::Circulation::UI| ) >>> +----------------------+ >>> | >>> ~ >>> >>> * Core::Main is simply an empty class that act as a parent for any >>> child, including Core::Circulation. >>> * Core::Circulation has a constructor that takes koha objects item and >>> library, optionally patron >>> and sysprefs overrides. It can have accessors such as checkout, >>> messages and other things needed for >>> intra, SIP or whatever. It has methods Checkin, Checkout and Renew, >>> amongst others. >>> * then: Deichman::Circulation::SIP in this example is a local override >>> that inherits from parents >>> Deichman::Circulation and Core::Circulation::SIP >>> >>> now the beauty of this is that Deichman::Circulation::SIP can override >>> anything (even the constructor) >>> without touching any of the core code, and perl will traverse the >>> inheritance tree until it finds the >>> first matching constructor and method. >>> >>> Pros: >>> - simpler, more readable and more reusable code. >>> - local adaptations are easy to hande, and reusable for others >>> - the slight overhead of using blessed objects and inheritance is >>> easily gained by the fact that any >>> operation will only need fetching Koha objects once >>> (item,library,patron etc) instead of refetching >>> them numerous times spread across methods calls and loops >>> - way less db calls if done right, faster Koha >>> - no more C4::Context, hopefully >>> - systempreferences can be dramatically reduced, since most of them >>> are about overrides anyways >>> - can be done incrementally, replacing one functionality at a time >>> >>> cons: >>> - refactoring doesnt make end users happy (but needs to be done in any >>> case) >>> - a bit of work to keep templates happy >>> - requires a basic understanding of oop >>> >>> So to sum up: We already have a working example for circulation (though >>> not in production) >>> that we can demonstrate. It reimplements basically the entire >>> C4::Circulation, just some small >>> parts missing. So it can be done. >>> >>> But we'd love to hear second opinions from the community! We know the >>> fear for breaking changes, but >>> its neither scary or complicated to implement! >>> >>> Benjamin Rokseth >>> Oslo Public Library >>> _______________________________________________ >>> Koha-devel mailing list >>> Koha-devel@lists.koha-community.org >>> http://lists.koha-community.org/cgi-bin/mailman/listinfo/koha-devel >>> website : http://www.koha-community.org/ >>> git : http://git.koha-community.org/ >>> bugs : http://bugs.koha-community.org/ >>> >> > _______________________________________________ > Koha-devel mailing list > Koha-devel@lists.koha-community.org > http://lists.koha-community.org/cgi-bin/mailman/listinfo/koha-devel > website : http://www.koha-community.org/ > git : http://git.koha-community.org/ > bugs : http://bugs.koha-community.org/ > -- --------------------------------------------------------------------------------------------------------------- Brendan A. Gallagher ByWater Solutions CEO Support and Consulting for Open Source Software Installation, Data Migration, Training, Customization, Hosting and Complete Support Packages Office: Portland, OR - Office: Redding, CT Phone # (888) 900-8944 http://bywatersolutions.com i...@bywatersolutions.com
_______________________________________________ Koha-devel mailing list Koha-devel@lists.koha-community.org http://lists.koha-community.org/cgi-bin/mailman/listinfo/koha-devel website : http://www.koha-community.org/ git : http://git.koha-community.org/ bugs : http://bugs.koha-community.org/