Skip to content

A legacy refactor kata, focused on the violation of the tell don't ask principle and anemic domain model

License

Notifications You must be signed in to change notification settings

gbremond/tell-dont-ask-kata

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

53 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

tell don't ask kata

A legacy refactor kata, focused on the violation of the tell don't ask principle and the anemic domain model.

Instructions

Here you find a simple order flow application. It's able to create orders, do some calculation (totals and taxes), and manage them (approval/reject and shipment).

The old development team did not find the time to build a proper domain model but instead preferred to use a procedural style, building this anemic domain model. Fortunately, they did at least take the time to write unit tests for the code.

Your new CTO, after many bugs caused by this application, asked you to refactor this code to make it more maintainable and reliable.

What to focus on

As the title of the kata says, of course, the tell don't ask principle. You should be able to remove all the setters moving the behavior into the domain objects.

But don't stop there.

If you can remove some test cases because they don't make sense anymore (eg: you cannot compile the code to do the wrong thing) feel free to do it!

Contribute

If you would like to contribute to this kata adding new cases or smells: please open a pull request!

Feedback

Feedback is welcome!

How did you find the kata? Did you learn anything from it?

Please contact me on twitter @racingDeveloper or use the GitHub repo wiki!

About

A legacy refactor kata, focused on the violation of the tell don't ask principle and anemic domain model

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • PHP 20.9%
  • Java 17.9%
  • TypeScript 16.0%
  • C# 14.5%
  • Python 11.5%
  • Scala 10.8%
  • Ruby 8.4%