A little while back I had an idea for a useful piece of software. Since then I have been using a lot of my spare time to learn software development. So far I have learnt;
- OOP concepts (inheritance, polymorphism, etc)
- The basic OOP design patterns (strategy, decorator, etc)
- C# programming language
- Some of the basics of the .NET libraries (collections, etc)
- Unit testing in visual studio
- Currently reading a book on Domain Driven Design
So, I'm well and truly past the "hello world" stage and I think I might even be ready to start coding my application. There is just one thing which I think might hold me back... persistence. My application will have some pretty complex domain logic, and I will need some way of preserving the state of domain objects between sessions. This poses a problem, since I currently have no experience with databases - and I would prefer to keep it that way if possible! I don't really want to have to learn databases upfront. If possible I would prefer to pay someone else to add persistence at a later stage when I have the rest of the software up and running.
So, my questions are;
1) Do I need to learn databases upfront? Or can I develop my domain logic now, and then add persistence later (almost as an after-thought)? Would this be easy to do, or will I completely have to tear up my code to make it work?
2) How much time will it take to learn databases? If it took me a month of my spare time to learn UML, and 2 months to learn C# & .NET basics... how long should I expect to spend on learning databases? Looking in from the outside, databases appear to be quite a complex subject.
Any advice from someone who has experience in building persistence into domain logic would be greatly appreciated!