Skip to content

Stronger library divisions for business logic #28

Description

@adeutscher

This issue is probably going be resolved in the same branch as #26, but I felt like it was significant enough to be its own issue.

At present, the Core.Logic project directly references Core. However, with #26 I'm exposing more and more public interfaces for reference by the host that I'd really rather that the business logic layer not be aware of. IJobSource being public since forever probably should have been enough of a reason to do this ages ago, but here we are.

Anyhow, to resolve this I'd like to draw a border for stuff that I'd rather the business logic layer now be aware of.

Plan:

  • Declare a new project called RedShirt.Example.JobWorker.Common.
    • Common shall reference no projects. This is the ground floor.
    • Common shall be directly referenced by Core and Core.Logic
    • All public constructs that I want the business logic layer to be aware of go here
      • Some off-the-cuff examples:
        • IJobModel
        • IJobDataModel
        • JobResult enum
        • IJobLogicRunner
        • ISleepService

This concern about inheritance borders also kind of exists between the JobManagement projects with their job source implementations, but I'm less concerned about them because they're more established compared with Core.Logic's barebones template setup.

At the end of the day, anyone using this template is certainly capable of being responsible with how they handle their application design. There's nothing stopping someone implementing this template from referencing Core themselves or making even more constructs public. However, I can still use these library borders to discourage that bad idea and maybe make auto-complete a bit less crowded.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions