|
I can think of a few times where I'd use the factory method, but it would be to simplify object creation, not to play programming cop . As another poster mentioned, you can just have your constructors protected if you don't want people creating your objects directly.
Writing code full of design patterns makes it less maintainable IMO.
I follow some architecture patterns in my code like MVVM and have adopted Dependency Injection, but most of the time, I try to write my public classes so they are completely stand-alone.
|
|
|
|
|
GParkings wrote: I am a fan of factory and interface driven development but often find myself
working amongst people i do not trust to stick to such patterns.
Presumably not because you are over using it.
The primary reason for factories is to control the creation idiom.
GParkings wrote: What techniques do everyone use to enforce use of a singleton factory? or do you
simply trust your fellow developers to do things properly?
The use case should make usage easy. If not then something is probably wrong somewhere.
|
|
|
|
|
GParkings wrote: What techniques do everyone use to enforce use of a singleton factory?
In general, without regard to the "singleton" part, I would usually implement a factory such that the factory and class are part of the same project. And the target classes are all internal. The factory is public.
Whether the factory is a singleton or not doesn't really have anything to do with that decision.
|
|
|
|
|
You have two options, and one requires that the classes be in a separate project.
If you have your class and factory in a separate project from the one that is creating instances of the class, then you have have all constructors in the class declared internal.
public class testFactory
{
public static test2 CreateTest()
{
return new test2();
}
}
class test2
{
internal test()
{
}
}
The option option is to integrate the factory with the class:
class test
{
public static test CreateTest()
{
return new test();
}
protected test()
{
}
}
Unlike some other people here, I think there can be really good reasons to want to force using a factory.
|
|
|
|
|
Can you say what some of those 'really good reasons' are?
|
|
|
|
|
It prevents developers from using the class in a way that is not intended. This prevents the more junior developers in the project from doing things in a way the architect does not want the developers to do. Just like when an Architect defines what projects can reference other projects. A good case would be when there are different implementations of an interface/abstract class, depending on some state information, and the this way the instantiating software does not have to know the details of which concrete type that is being instantiated. This is why ADO used software factories. If a developer then bypasses the factory, a bug could be introduced that the architect worked very hard to avoid.
To give another case: something I disagree with but also agree with is only being able to inherit from a single class. I can see cases where it would be very advantageous to allow multiple inheritance. This could be considered somewhat arbitrary, like preventing instantiation of a class without using a factory.
"Microsoft has been championing Software Factories to address the challenges of software development"
This indicates that Microsoft is a strong supporter of Factories. I am not an architect, so I am not an expert on architecting applications, and so am not as familiar as I probably should be in how factories are a good tool in creating good software architecture.
Check out:
http://en.wikipedia.org/wiki/Factory_method_pattern[^]
|
|
|
|
|
|
You could mark the constructor as obsolete with a message pointing people to the factory. Then use a pragma to suppress the warning in your factory when you call the constructor. It might look a bit ugly, but it will clearly point developers to the correct usage. Sometimes practical and explicit is more important than pretty.
For the discussion about using your pattern in the first place - Typically I would lean more towards an interface in Java and an abstract base class in .NET. This is what the respective developers would expect, and there are actually very good reasons for this difference as there are fundamental differences between the languages in this area.
|
|
|
|
|
If i click button , that content will open in a new tab. Like that i want to do 5 Buttons with different content. If i click one button the already open tab will be opened . Can you give me any solution .(I want IE,mozilla,google chrome browsers)
|
|
|
|
|
That's not a question, that's an assignment. How much are you willing to pay?
Please state "which content" will be opened in a new browser-tab. If it's a file then simply start the browser using the Proccess [^] class and pass the location to your file as a parameter.
Bastard Programmer from Hell
|
|
|
|
|
<a href="..." target="_blank"> will open a new tab in Chrome and Firefox, as long as they're configured to do so. I'm not sure about the JavaScript window.open.
|
|
|
|
|
The second argument of window.open is a name for the window. Give a unique name and a new 'window' (not a 'tab') would be opened up.
Vasudevan Deepak Kumar
Personal Homepage Tech Gossips
The woods are lovely, dark and deep,
But I have promises to keep,
And miles to go before I sleep,
And miles to go before I sleep!
|
|
|
|
|
Hello All,
I need to upload files to a server using http in a windows application. Is that possible? I have got some examples using HttpPostedFile , but that is in web application. The code is given below...
if( filMyFile.PostedFile != null )
{
HttpPostedFile myFile = filMyFile.PostedFile;
int nFileLen = myFile.ContentLength;
if( nFileLen > 0 )
{
byte[] myData = new byte[nFileLen];
myFile.InputStream.Read(myData, 0, nFileLen);
string strFilename =
Path.GetFileName(myFile.FileName);
FileStream newFile = new FileStream(strPath,
FileMode.Create);
newFile.Write(Buffer, 0, Buffer.Length);
newFile.Close();
}
}
I have placed an openfiledialog in a windows form and used the following code..
FileInfo fileInf = new FileInfo(openFileDialog1.FileName);
But how I can assign this FileInfo to HttpPostedFile. Any help would be appreciated.
Thanks in advance...
Sebastian
|
|
|
|
|
Possibly the simplest way for you to do this would be to use the WebClient class. Here's a quick sample:
private void SendFile(Uri address, string fileName)
{
using (WebClient client = new WebClient())
{
client.UploadFile(address, fileName);
}
} If you supply an HTTP address as the first parameter, POST is used. The beauty of this method is that it's clever enough to use STOR if the address is an FTP address, so you get the best of both worlds here. The address has to be the fully qualified URI of the resource to receive the file; this means you have to give it the full address - so if you were writing a file called myfile.csv to http://localhost:3040/ , you would need to supply http://localhost:3040/myfile.csv .
|
|
|
|
|
Thanks a lot.... Its a great help
Let me try to implement it
Best regards
Sebastian
|
|
|
|
|
Hi,
'HttpPostedFile' is not the thing you need , it stands for the file once it has been posted.
I guess
http://msdn.microsoft.com/en-us/library/system.net.webclient.aspx
is what you are looking for
|
|
|
|
|
Yeah, It should serve the purpose ....
Let me try to implement it
Best regards
Sebastian
|
|
|
|
|
|
Well, I'm not clicking on a tiny link to download some strangers code that I have no idea what it does.
Nobody is going to see your post in less than a week. If you've got some code to contribute, write up an article on it, the concepts behind it, how it works, a good sample project, ...
|
|
|
|
|
Hello friends in Code Project.
I need your help to find a solution to develop the code for a school project. A C# application is supposed to receive/send information from/to a website by clicking a link/button on the page.
ANY type of help is greatly appreciated.
|
|
|
|
|
OK, so what's the problem??
|
|
|
|
|
Hey Dave, appreciate for replying.
The problem is that I can't figure out how to connect the two (Web site and C# application). I can write an application in C# to listen to certain port. To send information from the browser and have the C# app to process is "the problem". I don't know how to go about it.
|
|
|
|
|
You might want to take a look at the WebClient[^] class. It exposes methods to send and receive data to/from web resources.
|
|
|
|
|
Great. Thanks Dave. I'll look into that. I guess I'll post another question if anything.
So far I can do a peer to peer application which also grabs frames from a camera on station 1 and display it in station 2. Now I need to make all this work through a web browser.
Appreciate the help!
|
|
|
|
|
TKCA wrote: Great. Thanks Dave. I'll look into that. I guess I'll post another question if
anything.
No problem.
TKCA wrote: Now I need to make all this work through a web browser.
Well, I can tell you all the code you're written so far will be useless in a web browser. Browsers run code in VERY restricted sandboxes, keeping all client resources away from your code. The only way around this is by installing controls on the client machines and those controls do all the work, the same as you have now. These controls are commonly referred to as ActiveX controls.
|
|
|
|