İçeriğe geç
Tüm projeler

Doküman ve Kalite Yönetim Sistemi

Kurumsal süreçleri, doküman versiyonlamayı ve kalite yönetimini tek çat altında toplayan modüler kurumsal yönetim sistemi.

Tarih
Ekim 2024
Rolüm
Full-stack Developer
Teknolojiler
  • ASP .Net Core
  • C#
  • React
  • Bootstrap 5
  • Dapper
  • REST API
  • MySQL

Proje Hakkında

Doküman ve Kalite Yönetim Sistemi (DQMS), işletmelerin kurumsal doküman süreçlerini, kalite standartlarını, arşiv sürelerini ve harici kaynaklı belgelerini dijital ortamda güvenle yönetebilmeleri için geliştirilmiş kapsamlı bir kurumsal yönetim platformudur. Çok katmanlı yapısı sayesinde farklı departmanların ihtiyaç duyduğu modülleri tek bir merkezi panelde toplar.

Sorun

Uygulama çok modüllü kurumsal bir yapıya sahip olduğu için, tüm bileşenlerin ve alt sayfaların bağımsız olarak ve tek tek render edilmeye çalışılması istemci tarafında ciddi performans kayıplarına, gereksiz re-render döngülerine ve yüksek bellek tüketimine yol açıyordu.

Ne yaptım

  • Mimariyi optimize etmek amacıyla dağınık yapıdaki tüm alt modülleri mantıksal ana modül çatıları altında kategorize ettim.
  • React tarafında merkezi bir üst bileşen (DocumentParent) kurarak alt modül sayfalarının rota tabanlı ve kontrollü bir şekilde yüklenmesini sağladım.
  • Backend tarafında ASP.NET Core 8.0 ve Dapper kullanarak bu ana modüllere özel, performans odaklı hızlı veri çekme (query) servisleri tasarladım.

Teknik notlar

Çok modüllü yapının performans kaybı yaratmadan, rota değişimlerine (location.pathname) göre optimize edilmiş bir üst bileşen (DocumentParent) ile yönetilmesini sağlayan örnek yapı:

const DocumentParent = () => {
    const [currentStep, setCurrentStep] = useState(1);
    const location = useLocation();

    const steps = [
        { id: 1, path: "/dokuman/listesi", component: <DocumentList/> },
        { id: 2, path: "/dokuman/arsiv-suresi", component: <ArchiveDuration/> },
        { id: 3, path: "/dokuman/dis-kaynakli", component: <ExternalDocuments/> },
        { id: 4, path: "/dokuman/olustur", component: <CreateDocuments/> },
        { id: 5, path: "/dokuman/prosedur", component: <ProcedurDoc/> },
        { id: 6, path: "/dokuman/dokumanlarim", component: <MyDocuments/> },
    ];

    useEffect(() => {
        const matchedStep = steps.find((step) => step.path === location.pathname);
        setCurrentStep(matchedStep ? matchedStep.id : 1);
    }, [location.pathname]);

    const renderCurrentStepComponent = () => {
        const matchedStep = steps.find((step) => step.id === currentStep);
        return matchedStep ? matchedStep.component : <div>Sayfa bulunamadı!</div>;
    };

    return (
        <div className="document-parent">
            <Sidebar/>
            <div className="content-container" data-aos="fade-up">
                <div className="step-content">{renderCurrentStepComponent()}</div>
            </div>
        </div>
    );
};

export default DocumentParent;