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/

Reply via email to