Social Networking Kata


https://monospacedmonologues.com/2013/04/the-social-networking-kata/ https://github.com/sandromancuso/social_networking_kata

Scenarios

Posting: Alice can publish messages to a personal timeline

> Alice -> I love the weather today
> Bob -> Damn! We lost!
> Bob -> Good game though.

Reading: Bob can view Alice’s timeline

> Alice
> I love the weather today (5 minutes ago)
> Bob
> Good game though. (1 minute ago)
> Damn! We lost! (2 minutes ago)

Following: Charlie can subscribe to Alice’s and Bob’s timelines, and view an aggregated list of all subscriptions

> Charlie -> I'm in New York today! Anyone wants to have a coffee?
> Charlie follows Alice
> Charlie wall
> Charlie - I'm in New York today! Anyone wants to have a coffee? (2 seconds ago)
> Alice - I love the weather today (5 minutes ago)

> Charlie follows Bob
> Charlie wall
> Charlie - I'm in New York today! Anyone wants to have a coffee? (15 seconds ago)
> Bob - Good game though. (1 minute ago)
> Bob - Damn! We lost! (2 minutes ago)
> Alice - I love the weather today (5 minutes ago)

General requirements

  • Application must use the console for input and output;
  • User submits commands to the application:
    • posting: <user name> -> <message>
    • reading: <user name>
    • following: <user name> follows <another user>
    • wall: <user name> wall
  • Don't worry about handling any exceptions or invalid commands. Assume that the user will always type the correct commands. Just focus on the sunny day scenarios.
  • Use whatever language and frameworks you want. (provide instructions on how to run the application)
  • NOTE: "posting:", "reading:", "following:" and "wall:" are not part of the command. All commands start with the user name.

Future growth

Since there are only 4 commands and a few lines of code, there is no need to add an architectural code pattern. The code is simple and straightforward. Although, scaling in terms of new commands, adding different data sources, or even a new UI, the code should be refactored to a more maintainable and scalable way with:

  • A proper architectural style such layered, hexagonal ...
  • Adhere to SOLID principles like Open/Closed or Dependency Inversion ...