Skip to content
master
Switch branches/tags
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
 
 
 
 

Data-Context-Interaction Example

This project shows the use of Data-Context-Interaction in a Xamarin.iOS MVC application.

WARNING: Over-Engineered!

This project is intended to illustrate techniques that are only actually applicable in far-more-complex situations. The application is over-engineered in terms of MVC and DCI is not called for in use-cases that can be implemented with a handful of lines.

WARNING: Under-Engineered!

This project's UX is intentionally terrible.

Purpose

The purpose of this project is to illustrate two techniques that are helpful in larger applications:

  • MVC with domain events; and
  • DCI

This project illustrates a "stricter" interpretation of MVC (as opposed to MVP and without the use of MVVM). Domain events (in this case, relating to the transfer of money) are used to decouple View and Controller elements from the Model. Additionally, View elements directly subscribe to these domain events, thus distinguishing this architecture from MVP. (For more discussion, see article).

DCI is a technique that is useful in complex use-cases, where the algorithm or business logic is a matter of refinement, validation by domain experts, etc. (In other words, situations more complex than what's strictly needed for this example.) This example shows the basic DCI structure:

  • The Controller establishes a Context, which corresponds to a use-case
  • The Controller creates "role-playing objects" by injecting methods ("what objects do" vs. "what objects are").
  • The use-case is defined by the explicit interaction of role-playing objects

Because C# does not have language support for Role types, Roles are defined as interfaces and injected via extension methods.

About

An example of the [Data-Context-Interaction pattern ](http://fulloo.info/) in Xamarin.iOS.

Resources

Releases

No releases published

Packages

No packages published

Languages