Re: Creating a "public only" constructor
Shawn Wildermuth <[email protected]> Mon, 6 Apr 2009 04:39:26 -0400
| Newsgroups | gmane.comp.windows.devel.dotnet.advanced |
|---|---|
| Message-ID | <[email protected]> |
If it's a ORM code generation, you might want to switch to a cool LINQ-enabled ORM tool built in the Netherlands (wink)... Thanks, Shawn Wildermuth http://wildermuth.com https://agilitrain.com Microsoft MVP (C#), MCSD.NET, Author and Speaker The Silverlight Tour is coming to a city near you! -----Original Message----- From: Discussion of advanced .NET topics. [mailto:[email protected]] On Behalf Of Frans Bouma Sent: Monday, April 06, 2009 4:34 AM To: [email protected] Subject: Re: [ADVANCED-DOTNET] Creating a "public only" constructor > If it were a new design yes - but it's not. The code generation has allowed > for this separate server capability, but I fear it cannot be utilised fully > because the code was historically never designed to work with it, and > without hundreds of hours of trawling through the current codebase it can't > be successfully changed to a class factory type scenario. If the code generation was template based, you might be able to do something about it, but I'm not sure how it's generated. Refactoring the code might be simpler than you might think. As is't the default ctor you're worried about, it's easy to spot with search/replace. if you load the codebase into vs.net, and do find/replace in files, and replace the call to the empty ctor to a call to a factory, the only thing that's to solve after that is the references to the right namespace where the factory is located. You can also spot calls to the second ctor with a simple regex in the find/replace dialog in vs.net. But I still don't fully understand what the order is in which the ctors are used. As I understand it, it seems that if I want to instantiate an invoice, I use the empty ctor of Invoice. And if I want to instantiate an invoiceitem, I use the parameter-using ctor in invoice, and you want to prevent that the invoiceitem empty ctor is used, correct? If you replace calls to both ctors to a call to a factory and make both ctors internal, you have full control over when what is called. However, I am a bit puzzled why the empty ctor is supposed to be public if instantiating an invoiceitem is always dependent on the invoice itself (as instantiating it on the same server as the invoice is always the best idea) FB > > Dino > > -----Original Message----- > From: Discussion of advanced .NET topics. [mailto:ADVANCED- > [email protected]] On Behalf Of Frans Bouma > Sent: Monday, 06 April 2009 19:57 > To: [email protected] > Subject: Re: [ADVANCED-DOTNET] Creating a "public only" constructor > > Dean, > > I have the feeling the concern whether OTHER objects are created on the same > server is not the concern of the class you want to instantiate but the > concern of a repository or other object. I know you're facing a large pile > of code, but you have to make a change somewhere anyway. I'd factor out this > concern from this class and create factories to produce the proper instances > on the right server/service. > > FB > > > Hmm - yeah. Not a bad idea... but would mean that only the Business > Services > > layer would ever compile in that release, and everything else would fail. > > > > -----Original Message----- > > From: Discussion of advanced .NET topics. [mailto:ADVANCED- > > [email protected]] On Behalf Of Dave Jones > > Sent: Monday, 06 April 2009 19:31 > > To: [email protected] > > Subject: Re: [ADVANCED-DOTNET] Creating a "public only" constructor > > > > Wrap the constructor in a #if release? Then it won't be available in > > debug? > > > > Dave > > > > > > > > > > -----Original Message----- > > From: Dean Cleaver <[email protected]> > > > > Date: Mon, 6 Apr 2009 16:02:43 > > To: <[email protected]> > > Subject: Re: [ADVANCED-DOTNET] Creating a "public only" constructor > > > > > > The second constructor allows you to create a business services object > > on > a > > different connection to the default - so I can specifically create > business > > services objects connected to 2 different servers from within the same > > application. I then want to ensure that if I create an Invoice object > > on a given server, than any InvoiceItems it creates are on the same > > server, > which > > would be done by using the second constructor. If a developer > > accidentally uses the default constructor, it could make a mess of the > system. > > > > -----Original Message----- > > From: Discussion of advanced .NET topics. [mailto:ADVANCED- > > [email protected]] On Behalf Of Shawn Wildermuth > > Sent: Monday, 06 April 2009 15:55 > > To: [email protected] > > Subject: Re: [ADVANCED-DOTNET] Creating a "public only" constructor > > > > I don't think you can. Can you explain why you want to protect it > > from internal classes? > > > > Thanks, > > > > Shawn Wildermuth > > http://wildermuth.com > > https://agilitrain.com > > Microsoft MVP (C#), MCSD.NET, Author and Speaker > > > > The Silverlight Tour is coming to a city near you! > > > > > > -----Original Message----- > > From: Discussion of advanced .NET topics. > > [mailto:[email protected]] On Behalf Of Dean > > Cleaver > > Sent: Sunday, April 05, 2009 11:42 PM > > To: [email protected] > > Subject: [ADVANCED-DOTNET] Creating a "public only" constructor > > > > Hey, anyone know if you can do this with attributes or something? I > > want > to > > have 2 public constructors: > > > > public ClassName() > > { > > } > > > > public ClassName(some param) > > { > > } > > > > I want both publically accessible, but I want the default one > *inaccessible* > > internally. Can that be done? > > > > Dino > > > > =================================== > > View archives and manage your subscription(s) at > > http://peach.ease.lsoft.com/archives > > > > =================================== > > View archives and manage your subscription(s) at > > http://peach.ease.lsoft.com/archives > > > > =================================== > > View archives and manage your subscription(s) at > > http://peach.ease.lsoft.com/archives > > > > =================================== > > View archives and manage your subscription(s) at > > http://peach.ease.lsoft.com/archives > > =================================== > View archives and manage your subscription(s) at > http://peach.ease.lsoft.com/archives > > =================================== > View archives and manage your subscription(s) at > http://peach.ease.lsoft.com/archives =================================== View archives and manage your subscription(s) at http://peach.ease.lsoft.com/archives =================================== View archives and manage your subscription(s) at http://peach.ease.lsoft.com/archives