How to reorganize a class with overloaded constructors

I have a class with an overloaded constructor (C #). It can be initialized in several ways, and some parameters are optional, so the result is an intricate group of constructors

new Object(StrA, StrB, ObjA)
new Object(StrA, StgB, ObjB, StrC)
new Object(StrA, StrB, ObjA, StrD)
new Object(StrA, StrB, ObjB, StrC, StrD)
new Object(StrA, StrB, StrE, ObjA)
new Object(StrA, StrB, StrE, ObjB)
new Object(StrA, StrB, StrE, ObjA, StrC)
new Object(StrA, StrB, StrE, ObjB, StrC, StrD)

I see two ways to improve the situation a) create a structure for storing optional parameters

new Config(StrA, StrB, StrD, StrE) 
new Object(Config, ObjA)
new Object(Config, ObjB, StrC)

b) set additional parameters as properties

A = new Object(ObjA)
A.StrA = some;
A.StrB = some;
A.StrD = some;
A.StrE = some;

What is the best way?

And such code refactoring is necessary - the previous supporting code says that "when using intellisense, the complexity of the constructor does not matter - you can always check tips and choose the right one"

+3
source share
10

, . IntelliSense , 5 , 3, , , , , . VB ( # 4.0) - , . # 3.0 :

class ObjectSettings
{
    public string StrA { get; set; }
    public string StrB { get; set; }
    ...
    public string ObjA { get; set; }
    public string ObjB { get; set; }
}

:

class Object
{
    public Object(ObjectSettings settings);
}

:

new Object(new ObjectSettings { StrA = ..., StrB = ..., ObjA = ... })

Object , , Object , . , , .

.NET FCL - . XmlReader/XmlReaderSettings .

+4

- , , # 4 - , .

, , (, XmlReader.Create TextReader Stream). , - , . , .

+3

- , Factory

Factory b)

var factory = new ObjFactory();
factory.StrA = some;
factory.StrB = some;

var obj = factory.Create();

, , - , , , Factory.. , , .

, , . , .

b), , . Factory, , .

+2

, , ... , , , . , . , , .

+2

, , , (). , ,

new Object(ParamA) {PropB = ParamB, PropC = ParamC, PropD = ParamD}

, , , . , ) , ) . .

+1

; . ( , B), # 4.0 ! .

0

. # 3.5 , :

A = new Object(ObjA)
{
    StrA = someA,
    StrB = someB,
    StrD = someD,
    StrE = someE
}
0

Factory.

, , , .

0

, , . , , .

, , , . , "" .

0

A: .

config?... .
?
?
?... ..

, // ctor()?

0

Source: https://habr.com/ru/post/1713396/


All Articles