
C# - Problemi i rješenja


-

Imam klasu koju popunjavam neki testnim podacima koji se ponavljaju.
class GetDoc
{
public Document docum1 = new Document
{
Title = "title 1",
Content = new List<IContent> {
new Section
{
Title = "title",
Size = ContentSize.Large,
Content = new List<IContent>
{
new HeaderValue
{
Header = "header",
Value = "yes",
Size = ContentSize.Large,
Orientation = Orientation.Horizontal,
IsDoubleSpace = false
},
new HeaderValue
{
Header = "header",
Value = "no",
Size = ContentSize.Large,
Orientation = Orientation.Horizontal,
IsDoubleSpace = false
},
new HeaderValue
{
Header = "header",
Value = "1111",
Size = ContentSize.Large,
Orientation = Orientation.Horizontal,
IsDoubleSpace = false
}
}
}
}
}
}
Ovaj boldani dio (Section) sa istim vrijednostima mi se kasnije ponavlja na nekoliko mjesta sa istim podacima.
Kako to mogu izbjeći?
sry na formatiranju, ne znam zašto tako napravi...

To ti je lagano,samo izvučeš tu klasu, nešto ovako
class GetDoc
{
public Document docum1 = new Document
{
Title = "title 1",
Content = new List<IContent> {
}
document = mynewClass.Section
}
}
class myNewClass{
public static Section => new Section
{
Title = "title",
Size = ContentSize.Large,
Content = new List<IContent>
{
new HeaderValue
{
Header = "header",
Value = "yes",
Size = ContentSize.Large,
Orientation = Orientation.Horizontal,
IsDoubleSpace = false
},
new HeaderValue
{
Header = "header",
Value = "no",
Size = ContentSize.Large,
Orientation = Orientation.Horizontal,
IsDoubleSpace = false
},
new HeaderValue
{
Header = "header",
Value = "1111",
Size = ContentSize.Large,
Orientation = Orientation.Horizontal,
IsDoubleSpace = false
}
}
}
}

Pozdrav,
trebao bih pomoć u vezi izrade baze podataka na SSMS-u (Sql server management systemu). Zanima me jesam li na dobroj temi u forumu i je li bi tko mogao pomoći ? Hvala na razumijevanju.


Hvala.

Pozdrav,
dobio sam jedan zadatak koji se odnosi na postavljanje testova u Visual studio 2019 nad već djelomično dobivenom programskom logikom. Trebam nadopisati još nekoliko programskih dijelova kako bi aplikacija uspješno radila.
Problem se pojavljuje u prikazanoj slici koja treba imati navedene klase.
Zanima me što bi sada značio ovaj dio povezanog entiteta prikazan na slici ?
Entitet:
Upravitelj Transakcijama
+ Upravitelj Transakcijama()
+ PrebaciSredstva(izvorIBAN: string, odredisteIBAN: string, iznos: double) : Transakcija [?] + OdobriMinus(izvorIBAN: string, odobreniMinus: double) : void
Hvala.

Pa kolko ja vidim to su metode(funkcije), ak na to mislis?

A što znači Transakcija [?] s upitnikom unutar uglatih zagrada ?
Provodi se nasljeđivanje bez ikakvih parametara unutar [?]. Jesam li u pravu ?

Array (lista) transakcija? [] je array.

A što znači Transakcija [?] s upitnikom unutar uglatih zagrada ?
Provodi se nasljeđivanje bez ikakvih parametara unutar [?]. Jesam li u pravu ?
Po meni ta metoda ovak nekak izgleda
public Transakcija[] PrebaciSredstva(string izvorIBAN, string odredisteIBAN, double iznos)
ovaj upitnik bi mozda bio velicina polja, sam se to bas i ne koristi neg koristis listu da nebi moral znat velicinu. Kolko ja vidim ti nije nikakvo nasljevidanje nego return type metode, jedino je napisano na mutav nacin pa po sintaksi izgleda slicno inheretancu u c#

Ne nisi, česta prasksa za prikaz potpisa funkcije u pseudo kodu je npr. imeFunkcije(int par1, int par2): returnType.
Ovo Transakcija[?] ne znam što znaći, možda je trebalo biti Transakcija?[], ili neodređena duljina arraya ili znaći bilo kola vrta liste. npr Transakcija[], IList<Transakcija>, IEnumerable<Transakcija> , ili samo jedan transakcija ako je operacija izvršena ako nije vrača se null

Pozdrav!
Pokušavam shvatiti način na koji funkcionira Dependency Injection u .NET Core.
Dakle, imam jedan ASP.NET Core WebAPI projekt i imam Class Library projekt. CL projekt mi predstavlja DataAccess Layer gdje mi se nalazi EntityFrameworkCore veza s postojećom bazom podataka.
Također imam sučelje i klasu koja implementira to sučelje (IUserRepository, UserRepository).
Kod u Program.cs datoteci mi izgleda ovako:
builder.Services.AddDbContext<SocialNetworkContext>(options => options.UseSqlServer(builder.Configuration.GetConnectionString("Database")));
builder.Services.AddScoped<IUserRepository, UserRepository>();
I sad, ja koristim taj context u UserRepository klasi:
private readonly SocialNetworkContext _socialNetworkContext;
public UserRepository(SocialNetworkContext context)
{
_socialNetworkContext = context;
}
Nakon toga UserRepository klasu koristim u pripadajućem kontroleru:
private IUserRepository _userRepository;
public UsersController(IUserRepository userRepository)
{
this._userRepository = userRepository;
}
I API funkcionira. Kako je to moguće?
Nisam nigdje instancirao ni DbContext klasu, niti UserRepository klasu. Nemam nigdje definiranu vezu između DbContext i UserRepository klasa, nisam nigdje injectao DbContext objekt u UserRepository klasu, no program i dalje funkcionira kao da objekt postoji.
Ne shvaćam baš ovaj koncept, proguglao sam već par objašnjenja za Dependency Injection no dosta mi je šturo objašnjeno.

Pa definirao si u Program.cs da se injecta taj tvoj repository u svaki kontroler koji u konstruktoru ima taj tip klase kao parametar.
.net core ti sam instancira kontroler sa repozitorijem (ili logerom, business logic layer handlerom ili nečim šestim, ovisno što ti treba u tom kontroleru). Tako funkcionira DI u .net coreu.
Sad opet ovisi koji tip DI koristiš hoće li se tvoj repozitorij kreirati pri svakom requestu, pri svakoj konekciji ili samo prvi put kad je napravljen request: Tranzitni, Scoped ili Singleton

Pa definirao si u Program.cs da se injecta taj tvoj repository u svaki kontroler koji u konstruktoru ima taj tip klase kao parametar.
.net core ti sam instancira kontroler sa repozitorijem (ili logerom, business logic layer handlerom ili nečim šestim, ovisno što ti treba u tom kontroleru). Tako funkcionira DI u .net coreu.
Sad opet ovisi koji tip DI koristiš hoće li se tvoj repozitorij kreirati pri svakom requestu, pri svakoj konekciji ili samo prvi put kad je napravljen request: Tranzitni, Scoped ili Singleton
Znači isto tako je ova linija koda zaslužna da se DbContext injecta u svaku klasu koja ga koristi?
builder.Services.AddDbContext<SocialNetworkContext>(options => options.UseSqlServer(builder.Configuration.GetConnectionString("Database")));
Hvala na objašnjenju!

Ta je linija zadužena da se DI sustavu unutar .Neta "dojavi" da kod svakog instanciranja klase (repository) instancira DbContext. Samo instanciranje vrši DI sistem.

Pa definirao si u Program.cs da se injecta taj tvoj repository u svaki kontroler koji u konstruktoru ima taj tip klase kao parametar.
.net core ti sam instancira kontroler sa repozitorijem (ili logerom, business logic layer handlerom ili nečim šestim, ovisno što ti treba u tom kontroleru). Tako funkcionira DI u .net coreu.
Sad opet ovisi koji tip DI koristiš hoće li se tvoj repozitorij kreirati pri svakom requestu, pri svakoj konekciji ili samo prvi put kad je napravljen request: Tranzitni, Scoped ili Singleton
Znači isto tako je ova linija koda zaslužna da se DbContext injecta u svaku klasu koja ga koristi?
builder.Services.AddDbContext<SocialNetworkContext>(options => options.UseSqlServer(builder.Configuration.GetConnectionString("Database")));
Hvala na objašnjenju!
Zapravo ti ta linija instancira sam DbContext i definira na koji će se DBMS spajati (SQL, mySQL, SQLite etc...) i kroz koji connString će se spajati na bazu (npr ovde možeš definirati da ti se u dev environmentu spaja na testnu bazu, a u produkcijskom na produkcijsku bazu).
DbContextu bi trebao pristupati isključivo kroz Repository. DI bi ti trebao instancirati repozitorij u svakom kontroleru koji ga ima u konstruktoru.

Zapravo ti ta linija instancira sam DbContext i definira na koji će se DBMS spajati (SQL, mySQL, SQLite etc...) i kroz koji connString će se spajati na bazu (npr ovde možeš definirati da ti se u dev environmentu spaja na testnu bazu, a u produkcijskom na produkcijsku bazu).
DbContextu bi trebao pristupati isključivo kroz Repository. DI bi ti trebao instancirati repozitorij u svakom kontroleru koji ga ima u konstruktoru.
Ne znači li to veliki udarac na performanse aplikacije?
Nas su na faksu učili da DbContext objekti uzimaju puno memorije pa je bolja opcija korisitit ih uz using blokove čime context objekt postoji samo unutar tog bloka koda. Sad vidim da se u praksi koriste uz DI pa mi je malo čudno.

DbContext je optimiziran da se brzo instancira, odradi što je potrebno (jedan unit of work, dakle jedan query ili jedan blok transakcija) i bude disposed. Ima neki sitni overhead kod instanciranja ali te profesore nitko nije obavijestio da je 1998. godina bila prije 25 godina i da server ima malo više od 128MB RAM.

DbContext je optimiziran da se brzo instancira, odradi što je potrebno (jedan unit of work, dakle jedan query ili jedan blok transakcija) i bude disposed. Ima neki sitni overhead kod instanciranja ali te profesore nitko nije obavijestio da je 1998. godina bila prije 25 godina i da server ima malo više od 128MB RAM.
Jasno. Hvala na objašnjenju!
https://www.w3schools.com/cs/cs_data_types.php
ili za sizeof operator
Console.WriteLine(sizeof(float)); // 4
Console.WriteLine(sizeof(double)); // 8
Char nije 1 nego 2 byte jer C# koristi unicode.
Pokušaj sam skužiti što se događa kad double pokušaš ugurati u float.