Coder Social home page Coder Social logo

mehmetozdeemiir / dddtwitterproject Goto Github PK

View Code? Open in Web Editor NEW
9.0 1.0 0.0 738 KB

DDD Twitter projesinde kullanılan teknolojiler DDD,Asenkron programlama, Generic Repository,Unit Of Work,View Component AutoMapper,Autofac,Fluent Validation,DTO,VM,Extension method

C# 84.69% HTML 11.03% CSS 0.93% JavaScript 3.36%
ddd ddd-architecture asenkron repository-pattern unitofwork unitofworkpattern viewmodel viewcomponents automapper autofac

dddtwitterproject's Introduction

Bu projede DDD, asenkron programlama,Generic Repository, Unit Of Work, View Component, AutoMapper, Autofac,Fluent Validation,DTO,VM,Extension method kullanılmıştır

Domain-Driven Design

:Kompleks gereksinimlerin var olduğu bir dünyada, sürekli değişen temel business kurallarını birbirine derinlemesine bağlayan bir yazılım geliştirme yaklaşımıdır.

DDD’ın temel amacı; hızlı değişen gereksinimlere hızlı adaptasyon sağlayan, kolay ölçeklenebilir, esnek ve highly available yazılımlar üretmektir. DDD’da uygulamanın içerisinde yer alan business kurallar, mantıksal olarak domain’lere dağıtılır. Sorumluluk olarak birbiri ile en alakalı birimler aynı domain üzerinde tutulurken, diğer birimler ise farklı domain’lere taşınır. Bu yaklaşımın dayandığı temel prensipler vardır. Temel diyorum çünkü tümü değil.

DDD nin en temel kavramlarından birtanesi de 4 katmanlı mimarisidir.

· Domain Layer

· Application Layer

· Presentation Layer

· Infrastructure Layer

Application:İş süreci kurgularının ele alındığı katmandır. Uygulamanın yetenekleri bu katmanda gözlemlenebilmektedir. Domaine bağlı varlıklar bu katmanda oluşturulur ve bu katman aracılığı ile güncellemeye maruz kalırlar.

Domain:Bu katman, uygulamanın kalbidir. entities, value objects, domain services and domain events.Varlıklar-entities, değer nesneleri-value object, etki alanı hizmetleri ve etki alanı olaylarından- domain services and domain events oluşur. Domain katmanında iş süreçlerinin simüle edilmesine odaklanılır.

Infrastructure: Teknolojiye özel kararlara odaklanılır amaçtan ziyade implementasyon kısmı ile ilgilenilir.Bu katmanda domainlerin instanceları yaratılabilir.Ancak genellikle repositoryler bu katmanda etkileşim içerisinde olurlar. Veri tabanı, mesajlaşma sistemleri, email servisleri gibi dış servislere erişilen katman olacaktır.

Presentation:Bu katman dış sistemlerle etkileşimin sağlanacağı kısımdır. Bu katman bir insan, bir uygulama veya bir mesajın domainin üzerinde oluşturacağı etkilerin giriş kapısı olarak yer almaktadır.

Unit Of Work nedir?

Veritabanı ile yapılacak olan tüm işlemleri, tek bir kanal aracılığı ile gerçekleştirme ve hafızada tutma işlemlerini sunmaktadır. Bu sayede işlemlerin toplu halde gerçekleştirilmesi ve hata durumunda geri alınabilmesi sağlamaktadır.

Tüm data işlemi yapan sınıflarınız Unit of Work içerisinde birer property olarak tutulur. Bu propertylere aynı DB connection ya da DB Context gönderilir. Property olarak gösterdiğimiz her sınıf kendi içinde değişmiş tüm datayı saklar. Unit of Work içinde bir “Save Changes” methodu olur. Bu method çağırıldığında tüm propertyler üzerindeki Save işlemleri çağırılır. Bu sayede işlemler yapılmış olur.

Avantaj olarak konuşursak, tüm DB işlemleri için dağıtık yapılarınızı tek bir sınıfta toplarsınız, transaction için rollback fonskiyonlarını ve kaydetme için save fonksiyonlarını tek bir method içinde kullanmış olursunuz. Bu da bir üst katman olan Service Layer ya da Business Intelligance Layer üzerinde işlem yaparken kolaylık sağlar. Eğer Dependency Injection kullanıyorsanız, küçük bir modifikasyonla hemen tüm DAL katmanınızı bu yapıya uygun hale getirebilirsiniz, zira çözülmesi gereken sadece DBContext nesnenizdir ve bu işlemlerin hepsi için sadece Unit of Work sınıfını güncellemeniz yeterli olacaktır.

AutoMapper nedir?

AutoMapper,Projelerimiz içerisinde tasarladığımız Dto,ViewModel gibi nesnelerimiz ile veritabanı tablolarımızı temsil eden entitylerimizi merkezi bir noktadan daha performanslı bir şekilde eşleştirmemize olanak sağlayan bir kütüphanedir.Tüm bu getirilerinin yanında bize tabiki ciddi birzaman kazandırdığı da bir gerçektir. Çok geniş bir veritabanı tablonuz olduğunu düşünün.Verinin update edilmesi aşamasında tüm propertyleri manuel olarak tek tek eşleştirmeniz gerekecek.Birde bunu bir çok kez yerde yaptığınızda ciddi bir zaman ve performans kaybı olacaktır. İşin daha kötüsü veritabanına yeni bir alan eklediğinde ise tüm bu eşleştirmelerin hepsini tek tek düzeltmeniz yada eklemeniz gerekecek.AutoMapper ile veritabanında olan bir değişikliği tasarladığınız nesye’de eklemeniz yeterli olacaktır. Kullanılan tüm methodlarda artık mapping işlemini otomatik bir şekilde gerçekleştiriyor hale gelmiş oluyor.

dddtwitterproject's People

Contributors

mehmetozdeemiir avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.