Софтуерно Инженерство
Loading...
+ Нов въпрос
butoff avatar butoff 33 Точки

Инстанциране на нов клас в същия клас. Кога и защо?

От упражнението за създаване на Web Sever 

Някой може ли да разясни, защо се ползва този начин на записване. Авторът така го е записал и Кенов така го записа.

Създава се инстанция и тогава се вика нейния метод Run(), вместо да се извика директно от Main.

public class Launcher : IRunnable
    {
        public static void Main()
        {
            new Launcher().Run();
        }

        public void Run()
        {
            var mainApplication = new GameStoreApp();
            mainApplication.InitializeDatabase();

            var appRouteConfig = new AppRouteConfig();
            mainApplication.Configure(appRouteConfig);

            var webServer = new WebServer(1337, appRouteConfig);

            webServer.Run();
        }
    }

И друг въпрос - защо се слага интерфейс на стартиращия клас (този клас с Main метода)?

Изглежда излишно.

1
C# Web Development Basics
TeodorStefanovPld avatar TeodorStefanovPld 1258 Точки

ако не е irunnable https://aspnetboilerplate.com/api-docs/html/T_Abp_Threading_IRunnable.htm няма да можеш да контролираш ето това, а останалото е  от design patterns и extensibility ако ти се наложи да смениш нещо като стартираш апп-а ще го смениш само в метода. а и реално нещата които са в метода нямат място в main,ако някои реши да пипа там и изтрие нещо или го промени ще стане страшно. main-a ти е просто мястото а достъп.

2
butoff avatar butoff 33 Точки

За интерфейса  добре, да речем, че е добра практика зад всеки клас да има интерфейс.

 Въпреки, че пръв път виждам Program (Startup, Launcher) да наследява интерфейс.

Каква е причината да не ползваме следния запис?

public class Launcher
    {        
        public static void Main()
        {
            Run();
        }

        public static void Run()
        {
            IApplication app = new MainApplication();

            IAppRouteConfig routeConfig = new AppRouteConfig();
            app.Start(routeConfig);

            WebServer webServer = new WebServer(1337, routeConfig);
            webServer.Run();
        }
    }

 

 

0
Sanity avatar Sanity SoftUni Team Moderator Trainer Forum Admin 194 Точки

Идеята на Web Server-а и Framework-а, които ще построяваме през курса, са да мимикрират държавния Framework на технологията (ASP.NET).

В ASP.NET Core, принципно се използва статичен Builder Method, който се извиква в Main метода, връщайки Host обект, който се Run-ва. https://docs.microsoft.com/en-us/aspnet/core/fundamentals/startup?view=aspnetcore-2.0

Не е въпрос на Pattern а до максимално приближение до това как трябва да изглежда на края. Ако искате можете да го рефакторирате. Въпроса е, че най-вероятно няма да сте консистентни със Server-а който се създава по време на лекциите. Принципно няма проблем за такива структурни промени, стига да не повлиаят на поведението на Server-а.

1