Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Review #2

Draft
wants to merge 1 commit into
base: master
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions content/abstract.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,11 @@ is the use of _composition_ to represent relationships between objects.
_Dependency Injection (DI)_ is a popular technique to manage such compositions,
which loosely couples objects via minimal interfaces,
and wires these objects together at runtime based on declarative configuration files.

<div class="comment" data-author="miel">
Are there actually DI frameworks with global semantics? If not, you can make this statement more concrete by stating that we propose global semantics for reason X and implement this using Linked Data.
</div>

Configurations for existing DI frameworks typically only have local semantics,
which limits their usage in other contexts.
<!-- Need -->
Expand Down
28 changes: 25 additions & 3 deletions content/introduction.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,17 @@
Object-oriented (OO) programming is a highly popular paradigm within the domain of software engineering.
Considering _objects_ containing data and logic as primary software elements
makes it easy for developers to understand software,

<div class="comment" data-author="miel">
Next part of sentence is unclear.
</div>

as it makes software resemble real-world mechanisms with interacting physical objects.
Most OO languages allow objects to be instantiated from _classes_ that determine the object's type,
where _inheritance_ can be used to let classes extend from other classes,
and thereby inheriting their fields, methods, and type(s).
Unfortunately, [inheritance is often overused in places where _composition_ would be better suited](cite:cites designpatterns),
where composition of objects (containment within each other) leads to more flexibility in terms of object relationships,
Unfortunately, [inheritance is often overused in places where _composition_ would be better suited](cite:cites designpatterns)<del class="comment" data-author="miel">,
where c</del>Composition of objects (containment within each other) leads to more flexibility in terms of object relationships,
and thereby leads to more loosely coupled objects.

A popular technique to manage the composition of objects is called [_Dependency Injection_ (DI)](cite:cites DependencyInjection).
Expand All @@ -20,7 +25,13 @@ In order to link these interfaces to concrete implementations,
a generic DI framework can provide specific implementations where needed based on some external configuration.
Since objects only communicate by strict interfaces,
and specific implementations are derived from an external configuration,
the specific wiring of a software application is not hard-coded anymore.
the specific wiring of a software application is <del class="comment" data-author="miel"> not hard-coded anymore</del>

<div class="comment" data-author="miel">
no longer hard-coded
</div>

.
Instead, this wiring can be altered afterwards by modifying the configuration file,
which makes the application more flexible.

Expand All @@ -32,6 +43,12 @@ when the creators of these configuration files have no programming knowledge,
or when configuration files are created automatically from an external tool –e.g., a visual drag-and-drop interface–.
Such declarative configuration files typically have only local semantics,
which means that they are usually only usable within the DI framework for which they were created, and for the current application only.

<div class="comment" data-author="miel">
The argument below should be a lot stronger, since it's the core of this paper. Why are global semantics good? What does interoperable_, _addressable_, and _discoverable_ mean to a software developer? Are there examples? What are the use cases?
</div>


With the power of [Linked Data](cite:cites linkeddata) and the [Semantic Web](cite:cites semanticweb) in mind,
these configurations could move _beyond_ their local scope,
and make them globally _interoperable_, _addressable_, and _discoverable_.
Expand All @@ -53,6 +70,11 @@ By publishing such descriptions,
the composition of software (and parts thereof) can be _unambiguously identified_ by IRIs and
retrieved through _dereferencing_.
Components.js automatically _instantiates_ such software configurations, including resolving the necessary dependencies.

<div class="comment" data-author="miel">
Maybe the benefits below should be moved up?
</div>

As such, this (de)referenceability of software configurations by IRI is beneficial in use cases such as:

Experimental research
Expand Down