I’m learning C# and am trying to get my head around when to use classes and when not to.
If I was writing an app for a bank, I know I would use classes for customers which would include their name, account number, balance, etc. Would I use a static class for the methods that would deposit into their account, withdraw, change their address, etc since I only need to write them once?
Also, what would I use to keep track of every customer object? Having 2,000 Customers:
exampleName = new Customer();
in my code doesn’t seem right. I’m not at the point of learning database’s yet and am just learning classes.
Having a database would be ideal, but in the mean time you could use an IEnumerable to hold your Customer objects, like this:
Then you can just pass the list around where needed.
Typically you will then have a property on the
Customerclass that holds the accounts:And so on. Note that I’m keeping this simple and doing things the more long winded and descriptive way as you are a beginner.
Using lists of items in this way is a good way to start because you will natuarlly use these when you get to using a database; you will retrieve result sets from the database and then translate those result sets into lists of business objects.
As for using static methods to do business logic like adjusting balances, changing addresses, etc., for you at this stage it doesn’t matter. If you are using tools like Resharper it will nag you with suggestions like that, but in your case you can safely ignore that particular one. What you should look for is keeping everything as self contained as possible, avoid leakage of data and leakage of responsibilities between objects – this is just good coding discipline and a good way to prevent bugs that are caused by loose coding.
Once you’ve got your functionality laid down and working, you may have a desire to move some functionality into static ‘helper’ style classes. This is absolutely fine, but do be careful – helper classes are fantastic and everything but can quickly turn into an anti-pattern if you don’t maintain that coding discipline.