Giter Club home page Giter Club logo

cacoding's Introduction

Clean Architecture

Preamble

This is a 2-week coding exercise.

You will extend the Clean Architecture implementation to add a use case. It is a continuation of this code: https://github.com/paulgries/LoginCleanArchitecture

We have:

  • implemented the changes from this week's lab
  • added the login use case
  • added a "logged in" View and View Model (showing the username), but no Interactor or Controller or Presenter.
  • created subpackages for the login, signup, and logged_in code
  • made some style and design change to the code

To explore the changes, run "git log" in a Terminal, or choose menu item Git โ€”> Show Git Log. Click and explore! You can even watch this README evolve.

Packaging

Take a moment to look at the package structure in src. There are packages for the layers of CA, and in some of these packages are "subpackages" for each of the three use cases, login, signup, and logged_in.

These packages don't have subpackages: data_access, entity, view, and app.

Thought question: Why don't these have use-case-specific subpackages?

A note on English: 2-word verb phrases vs. 1-word nouns

"Sign up" is a verb phrase and "signup" is a noun. That generalizes: "check in" vs "checkin", "log in" vs "login". Two words for the verb phrase, 1 word for the noun phrase.

For example, to complete a login, you need to log in.

In "the login process", "login" is a noun acting as an adjective to describe "process". "Basketball coach" is another example of this English construct.

Comparing the signup and login code

In lab this week, you worked with a single user interaction. We have added a second use case for login. Let's compare the two use cases.

Controllers

In IntelliJ, right-click on LoginController and select Open in Right Split.

Now double-click on SignupController. When you do, you will see the two Controllers side by side. They are identical in structure, differing only in the details.

Interactors

Now compare LoginInteractor and SignupInteractor side by side. (You can drag tabs around if you like.)

Thought question: Why doesn't the LoginInteractor have a UserFactory?

Remnants of a bug

Compare the two execute methods carefully. Look at the variable types (including the instance variables) and compare them to the CA Engine so you understand which boxes are relevant to the Interactors.

You'll notice that the LoginInteractor starts by extracting the login information from the Input Data object, and that on line 22 the code also gets the password before doing the comparison. In the Signup version, it's all done in one step.

The Login code was split up like this because there was a bug and it wasn't obvious what was causing it, even when we used the debugger. We isolated the bug (meaning, we found out what the problem was) by doing one step at a time.

Thought question: Which version do you find easier to understand, the Signup one or the Login one?

Thought question: Maybe the problem is with the debugging tools, maybe the IDE doesn't allow easy exploration of expressions?

Interactor assets

Each Interactor has an InputBoundary, InputData, OutputBoundary, and OutpuData. They're all quite short. Compare them.

Data Access Object

There is only one DAO, the FileUserDataAccessObject. It has changed since the lab: it has one more method. This is because it implements an interface, LoginUserDataAccessInterface.

Thought question: What is the method that was added?

Adding a use case interaction [for credit]

There is currently no way to delete users from the system.

This week's coding exercise has you add a "delete all users" button to the Signup screen and implement the logic for it.

Look for "TODO" in the SignupView class and follow the instructions.

Next, look at the empty classes and interfaces in the "clear_users" packages. Fill them in!

For this use case interaction, there is no data to give to the ClearController, and no data to put into ClearInputData.

Thought question: You need that Controller for CA, but do you need the InputData object?

Make a decision either way and implement your decision. There is no wrong choice.

See MarkUs for details about what you are expected to hand in.

Extra Practice

You likely noticed that other features of the program aren't working yet either. For example:

  • the Log out button doesn't work once a user logs in
  • the Cancel buttons don't actually cancel anything
  • the program isn't doing some expected checks for password length or username requirements
  • the program doesn't have an overall menu to choose between signing up and logging in
  • and many more!

If you feel you need more practice with Clean Architecture before getting started on the project with your team, we encourage you to try adding some of these other bits of functionality to this program.

cacoding's People

Contributors

pgries avatar jcal13 avatar daniel-makarov avatar

Forkers

lamkevin7

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.