GithubHelp home page GithubHelp logo

library_managment_system's Introduction

Bibliotekos valdymo sistema 📖MIT License

Turinys

  • Apie projekto Tech Stack'ą.
  • Trumpas projeto architektūros pristatymas
  • Kur panaudoti visi principai

Tech stack'as 🔗

Tipas Tech Dėtaliau
Programavimo kalba C# v7.2
Framework'as .NET WPF - Windows Presentation Foundation
Objektinis programavimas OOP Inkapsuliacija, abstrakcija, paveldimumas bei polimorfizmas
SOLID principai SOLID SRP, OCP, LSP, ISP, DIP
UI/UX XAML
IDE Visual Studio 2022
  Projekto paleidimas `LMS_VIKO_Nojus_Rascius_PI22A.sln`.

Trumpas projeto architektūros pristatymas 🔠

Interface'ai:

  • IPublishable.cs
  • IGenerator.cs
  • IItemManager.cs
  • IUserManager.cs

Klasės:

  • GenerateBooks.cs (paveldimumas - IGenerator)
  • GenerateJournals.cs (paveldimumas - IGenerator)
  • ItemManager.cs (paveldimumas - IItemManager)
  • Book.cs (paveldimumas - IPublishable)
  • Journal.cs (paveldimumas - IPublishable)
  • User.cs
  • UserManager.cs (paveldimumas - IUserManager)

UI/UX:

  • (main)_LogInWindow.xaml
  • App.xaml
  • HomeWindow.xaml
  • RegisterWindow.xaml

Kur panaudoti visi principai ✔️

  Inkapsuliacija (Encapsulation)

UserManager ir ItemManager klasės kapsuliuoja būseną ir elgseną, susijusią su vartotojais ir elementais atitinkamai. Jos pateikia metodus, tokius kaip RentItem, ReturnItem, BuyItem, ir pan., išlaikydamos vartotojų ir elementų sąrašus privačius. Tai užtikrina, kad duomenų vidinė reprezentacija būtų paslėpta nuo išorės, teikiant viešąją sąsają.

  Abstrakcija (Abstraction)

IUserManager ir IItemManager sąsajos pateikia abstrakčias operacijas, kurias galima atlikti nennurodant, kaip šios operacijos yra įgyvendinamos. Ši abstrakcija leidžia turėti skirtingas konkrečius įgyvendinimus, kurie gali būti keičiami nekeičiant likusios sistemos.

  Paveldėjimas (Inheritance)

Paveldęjimas pademonstruotas kodo architektūroje.

  Polimorfizmas (Polymorphism)

Polimorfizmas naudojamas per sąsajas IUserManager ir IItemManager. Tai leidžia HomeWindow sąveikauti su bet kuriuo objektu, kuris įgyvendina šias sąsajas polimorfiškai. Pavyzdžiui, jei IItemManager įgyvendima skirtingus elementų tipus, HomeWindow gali juos keistis tarpusavyje.

  Vieno Atsakomybės Principas (Single Responsibility Principle)

Kiekviena klasė turi vieną atsakomybę. Pavyzdžiui, ItemManager yra atsakingas už daiktų(knygų/žurnalų) valdymą (nuomą, grąžinimą, pirkimą), o UserManager už vartotojų autentifikaciją ir registraciją. Pavyzdžiui LogInWindow yra atsakingas tik už vartotojo sautentifikaciją.

  Atviro/Uždaro Principas (Open/Closed Principle)

Sistema yra atvira plėtrai, bet uždara modifikacijai. Pavyzdžiui, jei yra poreikis palaikyti naują publikuojamo daikto tipą, tai nereikia modifikuoti ItemManager ar HomeWindow klases, nes galima praplėsti IPublishable sąsają ir pridėti naują tipą į sistemą.

  Liskov Substitucijos Principas (Liskov Substitution Principle)

Išvestinės klasės turi būti keičiamos su jų bazinėmis klasėmis. Šis principas taikomas naudojant sąsajas IUserManager ir IItemManager. Bet kuri klasė, įgyvendinanti šias sąsajas, gali būti keičiama be norimų programos savybių pakeitimo.

  Sąsajų Atskyrimo Principas (Interface Segregation Principle)

Klientai yra priversti priklausyti nuo sąsajų. IUserManager sąsajoje yra deklaruojami tik su vartotojų valdymu susiję metodai. Panašiai IItemManager sąsajoje yra tik daiktų valdymo metodai, užtikrinant, kad klases, įgyvendinančias šias sąsajas, tikrai galės teikti atitinkamą funkcionalumą.

  Priklausomybių Apversimo Principas (Dependency Inversion Principle)

Aukšto lygio moduliai neturėtų priklausyti nuo žemo lygio modulių. Abu turėtų priklausyti nuo abstrakcijų. Pavyzdžiui, HomeWindow priklauso nuo IUserManager ir IItemManager sąsajų, o ne konkrečių įgyvendinimų, tai leidžia didesniam atsietumui ir lengvesniam testavimui.

library_managment_system's People

Contributors

noahit 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.