|
GParkings wrote: What techniques do everyone use
I work alone. (On my own stuff anyway.
I haven't had need of them in "the real world".
The only place I have factories in my code is amongst my database access classes -- they allow the selection and instantiation of a class specified in a configuration file or command line parameter. But the classes work fine without them as well, for those times when I don't want the flexibility.
I agree with the opinion that you are being overly dogmatic.
|
|
|
|
|
|
ok, i see where my tounge-in-cheek manner of typing up that post may have given that impression. fair enough
As i stated in another reply, i'm not suggesting a factory for every class. what i was attempting to do with this post was spark a debate over approaches to enforcing/encouraging use of factories where such things are advantageous.
i tend to work in dev teams for periods of 6 months, im not around after that to explain how particular classes should be instantiated personally so i aim to make the intended instantiation 'easiest-path' (i do, ofc, write documentation.. the whole last month of my last contract was spent documenting every concept within the code. but i'm the first to admit i don't always reach straight for the docs and things can get overlooked)
So, really, rather than trying to write annoying code as you suggest, i am trying to make peoples lives easier by guiding them to the intended use of the code i have written without having to spend hours examining it or reading documentation
Pedis ex oris
Quidquid latine dictum sit, altum sonatur
|
|
|
|
|
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.
|
|
|
|