Architecture :: Interface, Abstract Or Inheritance?
Oct 7, 2010
I have a table which houses two entities. StaticProgram and DynamicProgram. There is one column in that table called ProgramType which determines if a program is of Type static or Dynamic. Though these two entities are stored in one table (I am guessing because the primitive fields for Static and Dynamic programs are exactly the same) but from a business point of view these are two VERY different entities.
So, I created two Classes StaticProgram and DynamicProgram. However, I donot want to create two seperate Data Access Classes because it is going to be the exact same code replicated twice. I tried creating a "Program" class as base class and inherited StaticProgram and DynamicProgram classes but down casting is not supported so I can't return a "Program" object from the data access class and cast it to "StaticProgram" class.So, what are my options? Can I create an IProgram interface and have StaticProgram and DynamicProgram implement that interface and have my Data Access class return IProgram?
I know what Singleton Pattern means and Abstract class means.What I wanted to know was how would this apply to real world.Could anyone give me any good example or simple explanation.Say I have a simple website, why would I use any of the above if any.Why would it simplify my architechture.
I have a block of SQL statements that I like to use as a sort of function.
I was thinking that I could make a class and inherit all of the master function, then add the parts that I need for other sections of the program in a sub class.
The problem is, up to this point I've been programming ASP .Net through visual studio, and it's kind of just programming behind controls. I'm not sure where to put the class/function/method/interface, or whatever we call it.
Of course you probably know that visual studio creates a bunch of partial classes when you do an ASP. Net application... so.. to get access to a function like object, across classes.. use an Interface?
So this interface allows one server to request data from another server. The catch is that all xml for the interface is transmitted entirely over http posts followed by an empty status code 200 response. No data is sent in a response. So if my application wants to requests data, we send an http post with the xml request and receive a blank 200. Then, shortly after our request, we'll receive an http post to a predetermined URL with the xml data which we then send a blank 200. This data will then be stored in a SQL database. This interface cannot be altered.
The reason this is problematic is because our server is handling requests from clients that need that data in the response. If a user requests for data that isn't available in our database, it needs to be requested from the interface and then returned in the response. I'm just not sure how to get this to work out. I've thought about polling the database, but I'm worried about thread pool issues. I've also looked into using ManualResetEvent.WaitOne to halt the processing of the client request and then calling Set when the interface sends the data (as a request). I've read that wait threads are shared, but just don't know if this will scale well. Does anyone have any insight or I'm pretty much stumped on this one...
From the following URL i got some doubts about the Recommendations for using Abstract class vs interfaces
[URL]
1. If you anticipate creating multiple versions of your component, create an abstract class. Abstract classes provide a simple and easy way to version your components. By updating the base class, all inheriting classes are automatically updated with the change. Interfaces, on the other hand, cannot be changed once created. If a new version of an interface is required, you must create a whole new interface. { Is there any example for this t ounderstand throughly ?} If you are designing small, concise bits of functionality, use interfaces. If you are designing large functional units, use an abstract class. If you want to provide common, implemented functionality among all implementations of your component, use an abstract class. Abstract classes allow you to partially implement your class, whereas interfaces contain no implementation for any members. { Is there any example for this t ounderstand throughly?
I just want to know that how can I utilize the concept of Abstract class, virtual class etc. in my shopping cart website. I have read the tutorial out there on internet and I saw some examples too, but those examples are so general that they dosen't fit into real world scenerio like I am searching for a shopping website. Same questions again and again comes to my mind that why to made a class only to give the declaration of methods and property.
Why do we use the reference of abstract class (or base class) to create object of it's sub-class. eg: TextWriter is the abstract class for StreamWriter & StreamWriter.
I'm building a web app that will keep a events in a database and add the event to a Google calendar on insertion.
I have three types of events, PendingEvents, ApprovedEvents, and DeniedEvents. I'm using single table inheritance through LINQ-to-SQL, with the Event class being abstract and the 3 types inheriting from it
Each type of Event is stored in calendars differently. I would like to use an abstract member function in Event called AddToCalendar.
I'm trying to set this up in a separate class file because I'm using the LINQ-to-SQL designer and I don't want these to be overwritten if I change the LINQ diagram.
However, I get an error from all three inherited classes that "'WebCal.ApprovedEvents' does not implement inherited abstract member 'Edu.Northwestern.WebCal.Event.AddEventToCalendar()' WebCalendarWebApplication1App_CodeWebCalDataSource.designer.cs"
It looks like it won't check my outside file and only looks at the designer.
The non-designer partial class file looks something like this:
public partial class WebCalDataSourceDataContext : System.Data.Linq.DataContext {
i have the below code i want to put in a global method set as static so that i can build a couple tree views on my asp.net web app. now i have each building its own tree view using the code below. i was thinking to make a global static method to generate the node structure such as this and then just assign them to the tree view in my pages... or something like this. i dotn care about the details of the actual solution as long as i can have a single method to call like "buildTree()" that will be able to be used to bind the tree view controls to.toughs?
DataTable dtProjects = new DataTable(); DataTable dtRelease = new DataTable(); using (SqlConnection con = Global.GetConnection())
what is best to use in CTP 5 for inheritence. Ive heard of 3 ways of doing it. (This is indirectly addressed to Serenarules )
Table per Hierarchy ? Table per Type ? or able per Concrete Type ?
For those who wondering what the hell is that.. refer to http://weblogs.asp.net/manavi/default.aspx which is a nice blog about inheritence and polymorphism in CTP 5.
All my controllers inherit from a BaseController that has an ActionFilter attribute:
[AnalyticsData] public class BaseController : Controller {} public class AccountController : BaseController {} Some of my Actions in my controllers reuse the AnalyticsData ActionFilter: public class AccountController : BaseController { [AnalyticsData(Page="AccountProfile")] public ActionResult Profile() { // return View } }
I notice that the AnalyticsData ActionFilter only runs once. This is a good thing and I only want it to run once, but I'm wondering how that happens. If I set my breakpoint inside the OnActionExecuting:
public class AnalyticsAttribute : ActionFilterAttribute { public override void OnActionExecuting(ActionExecutingContext filterContext) { // break point set here } }
only gets hit once when AccountController serves it Profile view. How do ActionFilters and/or Attributes work that [AnalyticsData(Page="AccountProfile")] on the Action overrides/replaces [AnalyticsData] on BaseController?
I am developing a couple of small ASP.NET application and would like to know what pattern. approach do you use in your projects.
My projects involve databases, using Data access and Business logic layers.
The data-access approach that I was using so far is the following(I read in some book and liked it):
For DAL layer:
Creating an abstract class that will define all database manipulation methods to implement. The abstract class will contain a static "Instance" property, that will load (if instance == null) an instance (Activator.CreateInstance) of the needed type (a class that implements it).
Creating a classes that implement this abstract class, the implementation will be according to the databases (SQL, mySQL and etc) in use.
With this I can create different implementation according to database in use.
For BLL layer:
A class that encapsulates all all retrieved fields , and static methods that will call the DAL classes.