Post Page Advertisement [Top]

      Merhaba,
      Önceki yazımızda MVC web uygulamamızı oluşturmuştuk şimdi geldi Web uygulamamızı kodlamaya. İlk olarak Fluent NHibernate nuget paketini daha önceki yazımızda belirttiğimiz gibi projemize ekleyelim.Okurken ne dinlemeli ?

    Projemize daha önce oluşturduğumuz katmanlarda gerekli olan modülleri de referans alalım. Proje kodunu Github'da incelediğinizde rahatlıkla referans alınacak projeleri görebilirsiniz.



      Web uygulamamızın Startup.cs sınıfında bazı düzenlemeler yapalım. Bu düzenlemeler FluentNHibernate Mapping'lerini, Connection String ve DI(Dependency Injeciton) düzenlemelerini içerecektir.

            var connStr = Configuration.GetConnectionString("DefaultConnection");

            var _sessionFactory = Fluently.Configure()
                                      .Database(MsSqlConfiguration.MsSql2012.ConnectionString(connStr))
                                      .Mappings(m => m.FluentMappings.AddFromAssemblyOf<PlayerMap>())
                                      .Mappings(m => m.FluentMappings.AddFromAssemblyOf<CardMap>())
                                      .Mappings(m => m.FluentMappings.AddFromAssemblyOf<PurchaseMap>())
                                     
                                      .BuildSessionFactory();



            services.AddScoped(factory =>
            {
                return _sessionFactory.OpenSession();
            });


            //services.AddTransient<IGenericRepository<object>, GenericRepository<object>>(); not working
            services.AddScoped(typeof(IGenericRepository<>), typeof(GenericRepository<>));
            services.AddTransient<IPlayerService, PlayerService>();
            services.AddTransient<ICardService, CardService>();

            services.AddTransient<IPurchaseService, PurchaseService>();

       Sonra Players adında bir .cshtml oluşturalım. Bir username textbox ,bir buton ve uyarıcı bir text label olacağını var sayarsak aşağıdaki gibi Razor View oluşturalım.

@model Contract.PlayerModel
@{
    ViewData["Title"] = "Player";
}

<h1>Player</h1>

<div class="container">
    <div class="row">
        @using (Html.BeginForm())
        {
            <table width="100%">
                <tr>
                    <td width="13%"></td>
                    <td width="73%">
                        <table class="table borderless" width="100%">
                            <tr>
                                <td colspan="2">
                                    <h4>
                                        Add Player
                                    </h4>
                                </td>
                            </tr>
                            <tr>
                                <td>
                                    Username
                                </td>
                                <td>
                                    @Html.TextBoxFor(x => x.Username, new {@class = "form-control text-center", @placeholder = "Username"})
                                </td>
                            </tr>

                            <tr>
                                <td>
                                   
                                </td>
                                <td>
                                    <input type="submit" class="btn btn-success btn-md col-xs-12 mtm" value="Save"/>
                                </td>
                            </tr>
                        </table>
                    </td>
                    <td width="13%"></td>
                </tr>
                <tr>
                    <td width="13%"></td>
                    <td width="73%">
                        @if (!String.IsNullOrEmpty(ViewBag.Message))
                        {
                            <div class="note note-info">
                                <label> @ViewBag.Message </label>
                            </div>
                        }
                    </td>
                    <td width="13%"></td>
                </tr>
            </table>
        }
    </div>
</div>




       HomeContorller'da Player POST ve GET metodlarını kodlayalım ve DDD katmanlarının da nasıl kullanıldığını görelim:

        public IActionResult Player()
        {

            return View();
        }

        [HttpPost]
        public IActionResult Player(PlayerModel request)
        {
            Player player=request.ToEntity();
            _playerService.AddPlayer(player);

            ViewBag.Message = "Success.";

            return View();

        }


      Yukarıda olduğu gibi butona bastığında çalışan HttpPost metodumuz oldukça sade request ile sayfadan gelen model entitiy'e dönüştürülüyor ve inject ettiğimiz PlayerService ile Generic Repository Pattern kullanılarak kaydediliyor.

Projemizi çalıştıralım ve hemen bir oyuncu ekleyelim.






       Şimdi oyuncumuza bir kart ekleyelim , Cards sayfası kullanıcı Dropdownbox'ı içerdiğinden  Players sayfasına göre biraz daha karışık.


    Farklı oyuncular eklendikçe DropDownList 'deki kullanıcılar da otomatik olarak güncellenecek ve artacaktır. Hangi kullanıcı seçilir ise ona ait kart numarası oluşacaktır. Aşağıdaki görselde iki farklı kullanıcı gözükmektedir.



Card tablosudaki kayıtlara baktığımızda farklı oyuncular için DB'deki FK ilişkisini de görmüş oluruz.


      Ve son olarak oyuncu ve ilgili kart numarası ile alım yapalım. Burada farkındaysanız oyuncu DDL'i seçildiğinde sistemdeki kartları da ikinci kart DDL'ine anlık olarak yansımaktadır. Bu da bir Ajax Call ile gerçekleştirilmiştir. Bir diğer yazımızda bu konuya eğilebiliriz.







       Böylece .Net Core'da FluentMigrator kullanarak DB'mizi Script yazmadan oluşturduk. Ve MVC Web uygulamamızda FluentNHibernate kullanarak Entitiy Mapping'lerimizi yaptık. Ve tüm bunları Domain Driven Design' a uygun olarak gerçekleştirdik. Bu yazı serimiz burada bitmiş oldu. Umarım sizler için faydalı olmuştur. Uygulamada kodunu yazının başında belirttiğim gibi Github'da bulabilirsiniz. Lütfen takip etmeyi ve yıldız vermeyi unutmayalım. Okuduğunuz için teşekkürler.

Hoşça kalın.

Hiç yorum yok:

Yorum Gönder

Bottom Ad [Post Page]