I'm sure most are familiar with the phrase DRY in the software world - Don't Repeat Yourself. This is a fundamental principle of good software development.
Here is a question (background first).
We are an high level educational institution (college), and are putting together a new MVC application. The current version of this application is for faculty and staff who can perform various tasks such as searching for students, viewing grades and other academic information about that student. There are features to help advisers to enter notes about their students. Likewise, there are views to show overall college details and status for given graduation classes. All of this has security built in maintaining FERPA compliance.
The next thing we are going to do is to implement a "student" version - something the students can log into to see much of the same information - only tailored for the student. They would not be able to see other's information, but only their own. But, they will be able to see the same college level detail information.
My proposal is to make this all one application and use permissions to manage the views and data that is being displayed to the user. Others on the team think that it should be two completely separate applications because of the complexity of modifying the views based on the authorization level of the user.
Some of the problems I am seeing with making this a separate application are:
- MANY of the views would actually be the same data being displayed. Both the HTML and model code would have to be copied between the solutions - not to mention the unit tests. I don't want to maintain the same code in both places which will eventually become very difficult to maintain.
- The skins for both sites are the same - any changes would have to be done in both places.
- The authentication and authorization parts are exactly the same for both applications. We are authenticating against AD and have a common authorization database.
The main reason some others on the team want separate applications is because there is more complexity regarding having to decide who is making the calls and then making sure they get the views and data they are supposed to.
Now for the questions - Is there anyone who thinks I am wrong in my position on this? If so, please explain why so I may understand that side of the equation better. Likewise, if you agree with me, do you have a better way of explaining the given rational with better/more reasons than I've stated above?
Thanks for any suggestions/thoughts!
What's it gonna take to get you into a DRY architecture today?