I am going to start a C# project from scratch that will consist of several modules so it can be sold by modules of an existing PHP/ASP/MySQL/Oracle/MS SQL application that manages to show 3D objects and create 2D and 3D CAD files from a web app that the user can use to create all the stuff.
My question is, to start from ground zero, and having the ‘sell’ point of view, it should be a good programming method that I should implement, design patterns, unit testing, etc… how will I know how to apply them, and is there any good tutorial / ‘show me the way’ kind’a thing to know about these things, like…
- what classes should I make available to be overridden by the client so I can provide extensibility in our modules?
- what kind of ‘package’ should I use to ‘sell’? DLL, CAB, MSI?
- should I use SubSonic / NHibernate so the user can generate their own DAL? Our prototype implementation will use only Oracle.
I’m kinda lost right now, I know what to do, but not how I can accomplish it (having this perfect coding path in mind).
Any good programming ideas are gladly appreciated 🙂
For a quick hit of each of your explicit questions I would say.
As for the how of integration, learn inversion of control principals and how it is used for extensibility purposes. Keep an eye on MEF, Microsoft Extensibility Framework. As for the what, your integration points will depend mostly on the type of application you are writing and your target audience. It also depends on how much control you want to give third parties. Reflector for example has a great, almost wide open plugin structure in place.
DLL’s and CABs are libraries and storage formats respectively. By themselves, they don’t do much. MSI’s are one form of installer and can contain the DLLs that will make up your application. Regardless of the type of installer you have, the easier it is to use, the more people that will try your product.
The data layer itself doesn’t necessarily matter so much. People probably won’t be creating their own data layers for your application and if they do, they should be able to use what ever they want if your extensibility framework is doing its job. More importantly is that whatever DAL you do decide on, you need to check to see if it is capable of running on different databases if that is important to you and how much work it takes. You also need to make sure the features you use in the DAL work for all of the databases you want to support. NHibernate has several features that don’t work in all of the databases it runs on.