рдбреЗрдЯрд╛рдмреЗрд╕ рд▓реЙрдЬрд┐рдХ рд╡рд┐рднрд╛рдЧ, рд╕рд╛рде рд╣реА рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди

рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛

Habr├й рдкрд░ рдореЗрд░реА рдкрд╣рд▓реА рдкреЛрд╕реНрдЯ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдмрд╛рддрдЪреАрдд рд╣реБрдИ:

A. рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рд╕реАрдзреЗ рд╕рдВрдЧреНрд░рд╣реАрдд-рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реА рдПрдХреНрд╕реЗрд╕ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╡рд░реНрдЧ рд╕рдВрдЧреНрд░рд╣реАрдд рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ

B. "рдХреЗрд╡рд▓ рд╕рдВрдЧреНрд░рд╣реАрдд рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ" - рдЖрдк NoSQL рдЙрддреНрдкрд╛рджреЛрдВ рдХреЛ рдХреНрдпрд╛ рдХрд╣рддреЗ рд╣реИрдВ?


рдЖрдЧреЗ рдЬреЛрд░ рджрд┐рдпрд╛ рдПрд╕рдХреНрдпреВрдПрд▓ рдмрдирд╛рдо NoSQLред рд▓реЗрдХрд┐рди рдореВрд▓ рдмрд╛рддреЗрдВ рдЦреЛ рдЧрдИрдВ: рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдПрдХ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рддреЗрдЬ рд╡рд░реНрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдкреВрд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдХреЙрд▓ рдХреЛрдб рдХреЛ рддрд┐рддрд░ рдмрд┐рддрд░ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП ред

рдореБрдЭреЗ рдЕрднреА рднреА рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ рдХрд┐ NoSQL рдмрд╣реБрдд рд╕рд╛рд░реЗ рдпреБрд╡рд╛ рдЙрддреНрдкрд╛рдж рд╣реИрдВ рдЬреЛ рд╕рднреА рдЧрдВрднреАрд░рддрд╛ рд╕реЗ рд╕рдВрдмрдВрдзрдкрд░рдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзрд╛ рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди NoSQL рдореЗрдВ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рдЖрд▓рд╛ рд╣реИред рдореБрдЭреЗ рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдХреБрдЫ рдбреЗрдЯрд╛ рд╕реНрдЯреЛрд░реЗрдЬ рдХреА рдЬрд░реВрд░рдд рдереА, рдЬрд╣рд╛рдВ рдХреЛрдИ рдмрдбрд╝реА рд╡реЙрд▓реНрдпреВрдо рди рд╣реЛред рдФрд░ рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ MongoDB рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред (рдореИрдВ рдмрд▓реНрдХрд┐ Oracle NoSQL рдбрд╛рдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди C # рдореЗрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдирд╣реАрдВ рдЦреЛрдЬ рд╕рдХрд╛)ред

рдЦреИрд░, рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдм рдХреБрдЫ рдХрд╛рдлреА рдЕрдЪреНрдЫрд╛ рд╣реИ, рдпрд╣ рдмрд╣реБрдд рдХрдо рд╣реЛ рдЧрдпрд╛ рд╣реИ:

var рд╕рдВрдЧреНрд░рд╣ = dbред GetCollection < StrategiesData > ( ) ;
рд╕рдВрдЧреНрд░рд╣ред рд╕рд╣реЗрдЬреЗрдВ ( argObject ) ;


рдЬрд╣рд╛рдБ StrategiesData рдореЗрд░реА рд╡рд╕реНрддреБ рдХрд╛ рдкреНрд░рдХрд╛рд░ рд╣реИ, argObject рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореЗрд░реА рд╡рд╕реНрддреБ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕ рддрд░рд╣ рдХреА рд╢реИрд▓реА рдкреВрд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдкреАрд▓ рдХреЗ рдмрд┐рдЦрд░рдиреЗ рдХреЛ рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рддреА рд╣реИред рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╡рд╕реНрддреБ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдирд╛

< рд░рдгрдиреАрддрд┐рдпрд╛рдБ >


рдЦреИрд░, рдореИрдкрд┐рдВрдЧ рдХреЗ рдХреНрдпрд╛ рдЕрд╡рд╢реЗрд╖ рд╣реИрдВ (рдЕрдкрдбреЗрдЯред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдПрдХ рдФрд░ рд╡рд┐рдХрд▓реНрдк рд╣реИ - рдмрд╕ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рдврд╛рдВрдЪреЗ рдореЗрдВ рд╕реЛрдЪрдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдВ, рд▓реЗрдХрд┐рди рдореИрдкрд┐рдВрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдпрд╣ рдЕрдзрд┐рдХ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ)ред рд╣рдо рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ



рд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХреЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВ

рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдорд╛рдирдЪрд┐рддреНрд░рдг рдЗрддрдирд╛ рд╕рд░рд▓ рдирд╣реАрдВ рдерд╛ред рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рд╢рд╛рдпрдж рдХреЛрдИ рдХрд╛рдо рдЖрдПрдЧрд╛ред

рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╡рд░реНрдЧ рдбреЗрдЯрд╛рдмреЗрд╕
{
/// рд╡рд░реНрддрдорд╛рди рдбреЗрдЯрд╛рдмреЗрд╕
IMongoDatabase db ;

рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╢реВрдиреНрдп рд╕рд╣реЗрдЬреЗрдВ ( рдСрдмреНрдЬреЗрдХреНрдЯ argObject )
{
MethodInfo MethodGetCollectionGeneric = null ;

MyType = typeof ( IMongoDatabase ) рдЯрд╛рдЗрдк рдХрд░реЗрдВ ;
MethodInfo [ ] myMethod = myTypeред рдЧреЗрдЯрдореЗрдереЛрдбреНрд╕ ( ) ;
foreach ( рдореЗрдереЗрдореЗрдЯ рдореЗрдВ MethodInfo m )
{
// рдХреЗрд╡рд▓ GetCollection рдирд╛рдордХ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ
рдЕрдЧрд░ ( mред name == "GetCollection" )
{
ParameterInfo [ ] рдкреА = рдПрдоред GetParameters ( ) ;
// рдХреЗрд╡рд▓ рдЕрдзрд┐рднрд╛рд░ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рд╡рд╛рдкрд╕реА рдкреНрд░рдХрд╛рд░ рд╕рд╛рдорд╛рдиреНрдп рд╣реИ,
// рдФрд░ рд╡рд┐рдзрд┐ рдХрд╛ рдХреЛрдИ рдкреИрд░рд╛рдореАрдЯрд░ рдирд╣реАрдВ рд╣реИ
рдпрджрд┐ ( mред ReturnType ред IsGenericType && piред рд▓рдВрдмрд╛рдИ == 0 )
{
MethodGetCollectionGeneric = m ;
рддреЛрдбрд╝рдирд╛ ;
}
}
}

// рд╣рдорд╛рд░реА рд╡рд╕реНрддреБ рдХрд╛ рдкреНрд░рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ
ObjectType = argObject рдЯрд╛рдЗрдк рдХрд░реЗрдВред GetType ( ) ;
рдЯрд╛рдЗрдк [ ] typeArgs = { ObjectType } ;
// рд╣рдорд╛рд░реЗ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рд╡рд┐рдзрд┐ рдХреЛ рдЙрджрд╛рд╣рд░рдг рджреЗрдВ
MethodInfo MethodGetCollectionGenericMake = MethodGetCollectionGenericред MakeGenericMethod ( typeArgs ) ;
// рд╡рд┐рдзрд┐ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ
var рд╕рдВрдЧреНрд░рд╣ = MethodGetCollectionGenericMakeред рдЖрд╣реНрд╡рд╛рди ( db, null ) ;
рд╕рдВрдЧреНрд░рд╣ред рд╕рд╣реЗрдЬреЗрдВ ( argObject ) ;
}


рдЗрд╕рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕реЗрд╡ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рдЕрдкреАрд▓ рд╣реИред рдФрд░ рд╣рд░ рдЬрдЧрд╣ рд╣рдо рдбреЗрдЯрд╛рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдХреЗ рдЕрдкрдиреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдФрд░ рдЬрдм рдЖрдкрдХреЛ рд░рд┐рд▓реЗрд╢рдирд▓ рд╡рд╛рд▓реЗ рд╕рд╣рд┐рдд рдЕрдиреНрдп рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рдпрд╣ рдЖрд╕рд╛рдиреА рд╕реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рд╕реЗрдЯ рдХрд░рдХреЗ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдХреЙрд▓ рд╕рдорд╛рди рд░рд╣реЗрдЧрд╛ред рдЕрдиреНрдпрдерд╛, рдЖрдкрдХреЛ рдкреВрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛, рдЬреЛ рдПрдХ рдЧрдВрднреАрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЖрддреНрдорд╣рддреНрдпрд╛ рдХреЗ рд╕рдорд╛рди рд╣реИред рдЗрд╕рд▓рд┐рдП, рдХрд┐рд╕реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдбреЗрдЯрд╛рдмреЗрд╕ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЛ рдХрднреА рднреА рди рдмрд┐рдЦреЗрд░реЗрдВ - рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╡рд░реНрдЧ (рдпрд╛ рдЙрдирдХреЗ рдкрджрд╛рдиреБрдХреНрд░рдо, рдФрд░ рдлрд┐рд░ "рдХрд╛рд░реНрдп рдкреНрд░рдмрдВрдзрдХ" рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП - рдКрдкрд░ рд╕реЗ рдЖрдкрдХрд╛ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд░реНрдЧ рдпрд╣ рддрдп рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдПрдХ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рд▓реЗрдЦрдХ рдХреЛ рдЪреБрдирдХрд░ рдХрд╣рд╛рдБ рдмрдЪрд╛рдпрд╛ рдЬрд╛рдП)

рдпреБрдкреАрдбреАред

рдореБрдЭреЗ рдиреАрдЪреЗ рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЕрдЧрд░ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдм рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ

public void Save2 < T > ( T argObject ) рдЬрд╣рд╛рдВ T : рдХреНрд▓рд╛рд╕ рд╣реИ
{
var рд╕рдВрдЧреНрд░рд╣ = dbред GetCollection < T > ( ) ;
рд╕рдВрдЧреНрд░рд╣ред рд╕рд╣реЗрдЬреЗрдВ ( argObject ) ;
}


рд▓реЗрдХрд┐рди рддрдм рдЙрдиреНрд╣реЛрдВрдиреЗ "рдЦреБрдж рдХреЛ рдЧрд░реНрдо рдХрд┐рдпрд╛" :)

рдЕрдкрдбреЗрдЯ 2. рдлрд┐рд░ рднреА, рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдмрд┐рдирд╛ рдКрдкрд░ рдХрд╛ рд╕рдорд╛рдзрд╛рди рд╣рдореЗрд╢рд╛ рд╕рдлрд▓ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ! рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо рдкрджрд╛рдиреБрдХреНрд░рдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп, рдкреНрд░рдХрд╛рд░ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореИрдкрд┐рдВрдЧ рдХреЗ рдмрд┐рдирд╛, рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдорд╛рддрд╛-рдкрд┐рддрд╛ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдХрд╛рд░ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рди рдХрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛред рдореИрдВ рдХреЛрдб рдХреЛ рдереЛрдбрд╝рд╛ рдмрд╛рдж рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рдХрд░ рджреВрдВрдЧрд╛ред

рдЕрджреНрдпрддрди рейред
рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рд▓реЗрдЦ - рдбреЗрдЯрд╛рдмреЗрд╕ рд▓реЙрдЬрд┐рдХ рд╡рд┐рднрд╛рдЧ (рдкреНрд░рдпрд╛рд╕ рдХреНрд░рдорд╛рдВрдХ 2)

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


All Articles