[Koha-devel] Koha Core anyone?

Jonathan Druart jonathan.druart at bugs.koha-community.org
Tue Apr 10 18:30:03 CEST 2018


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.druart at 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.rokseth at 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 at 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/
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.koha-community.org/pipermail/koha-devel/attachments/20180410/4099bc03/attachment.html>


More information about the Koha-devel mailing list