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/