সূচিপত্র

আর্কিটেকচারাল ভিশন

নির্দেশক নীতি

মহাখ্যাপনি উদ্বেগের বিভাজন নীটির ভিত্তিতে তৈরি :

  • Contenu : সমৃদ্ধ মেটাডেটা সহ গঠিত AsciiDoc ফাইল

  • প্রস্তুতি : টেমপ্লেট Thymeleaf পুন:ব্যবহারযোগ্য

  • ডেটা : JBake द्वारा AsciiDoc অ্যাট্রিবিউট থেকে স্বয়ংক্রিয়ভাবে মডেলটি নিষ্কাশিত হয়।

  • Style : Bootstrap 5 দৃশ্যমূলক সমন্বয়ের জন্য

রণনৈতিক পছন্দ : পোর্টফোলিও জন্য AsciiDoc

Table 1. AsciiDoc কেন?
মানক লাভ

সঙ্গতি

ব্লগ পোস্টের মতো একই ফরম্যাট

মেটাডেটা

সংগঠিত এবং প্রসারণযোগ্য বৈশিষ্ট্য (project-*)

বজায় রাখার যোগ্যতা

সহজ টেক্সট সম্পাদনা, Git-এ সংস্করণযোগ্য

লবচতা

সমৃদ্ধ সামগ্রী ধারণ করতে পারে (টেবিল, কোড, ছবি)

টেম্প্লেটিং

JBake স্বয়ংক্রিয়ভাবে Thymeleaf-এর জন্য বৈশিষ্ট্যাগুলি বের করে

তথ্য মডেল

প্রতিটি পোর্টফোলিও প্রকল্প একটি AsciiDoc ডকুমেন্ট :

  • শিরোনামের মেটাডেটা : গঠিত তথ্য (গ্রাহক, সময়াবধি, প্রযুক্তি, এত্যাদি)

  • দকুমেন্টের শরীর : কাহিনীমূলক বর্ণনা, চ্যালেঞ্জ, সমাধান, ফলাফল

  • কাস্টম atribুট : প্রিফিক্সড`project-*`স্বয়ংক্রিয় এক্সট্র্যাকশনের জন্য

@startuml
skinparam backgroundColor #FEFEFE
skinparam handwritten false

class ProjetAsciiDoc {
  +titre: String
  +jbake-type: "প্রজেক্ট"
  +jbake-status: published|draft
  +jbake-date: Date
  +jbake-tags: List<String>
  --
  +project-category: String
  +project-client: String
  +project-duration: String
  +project-role: String
  +project-thumbnail: String
  +project-gallery: List<String>
  +project-tech-stack: String
  +project-highlights: List<String>
  +project-demo-url: String
  +project-github-url: String
  --
  +body: HTML (converti)
}

class JBakeEngine {
  +parse(asciidoc)
  +extractMetadata()
  +convertToHTML()
}

class ThymeleafTemplate {
  +portfolio.html
  +project.html
  +partials/project-card.html
}

class PortfolioPage {
  +published_projects: List
  +filtres: categories
}

ProjetAsciiDoc --> JBakeEngine : পার্স
JBakeEngine --> ThymeleafTemplate : ডেটা প্রদান করে
ThymeleafTemplate --> PortfolioPage : উৎপন্ন করে
@enduml

বিস্তারিত ব্যবহারের ক্ষেত্র

UC1 : পোর্টফোলিয়োর মধ্যে একটি আইটেম যোগ করুন

নমিনাল প্রবাহ

@startuml
skinparam backgroundColor #FEFEFE
actor Développeur as dev
participant "এডিটর\nটেক্সট" as editor
participant "ফাইল\nAsciiDoc" as file
participant "JBake\nইঞ্জিন" as jbake
participant "সাইট\nস্ট্যাটিক" as site

dev -> editor : নতুন ফাইল তৈরি করুন
activate editor
editor -> file : portfolio/nouveau-projet.adoc
activate file

dev -> editor : মেটাডেটা সহ শিরোনাম লিখুন\n(titre, type=project, status=published,\nattributs project-*)
dev -> editor : কাহিনিমূলক উপবিন্যাস\n(প্রেক্ষিত, চ্যালেঞ্জ, সমাধান)
dev -> editor : assets/img/portfolio/-এ ছবি যোগ করুন

editor -> file : সংরক্ষণ
deactivate editor

dev -> jbake : বিল্ড চালু করুন (jbake -b)
activate jbake
jbake -> file : পড়া এবং পার্স করা
jbake -> jbake : মেটাডেটা বের করা
jbake -> jbake : রূপান্তরিত করা AsciiDoc → HTML
jbake -> jbake : project.html টেমপ্লেট প্রয়োগ করুন
jbake -> jbake : portfolio.html তালিকায় যোগ করুন
jbake -> site : স্ট্যাটিক পৃষ্ঠা তৈরি
deactivate jbake

dev -> site : ফল যাচাই করুন
activate site
site --> dev : প্রকল্প দেখান
deactivate site
@enduml

তैयার করতে যাওয়া ফাইলের টেমপ্লেট

ডেভেলপার তৈরি করে`content/portfolio/nom-projet.adoc`একটি মানককৃত গঠন :

  • শিরোনাম সমস্ত প্রয়োজনীয় বৈশিষ্ট্য সহ

  • মানকীভুক্ত বিভাগ (প্রেক্ষাপট, চ্যালেঞ্জ, সমাধান, ফলাফল)

  • ছবির সামঞ্জস্যপূর্ণ নামকরণ

যাচাই পয়েন্ট

  • প্রয়োজনীয় বৈশিষ্ট্য উপস্থিত আছে (jbake-type, jbake-status, project-thumbnail)

  • সূচিত ছবিগুলো [_] মধ্যে বিদ্যমান`assets/img/portfolio/`

  • JBake বিল্ড ত্রুটি ছাড়া সফল হয়

  • প্রকল্পটি পোর্টফোলিও পৃষ্ঠায় দেখা যায়

  • প্রকল্পের স্বতন্ত্র পৃষ্ঠা সঠিকভাবে প্রদর্শিত হচ্ছে

UC2 : পোর্টফোলিও থেকে একটি আইটেম মুছুন

নামিনাল প্রবাহ

@startuml
skinparam backgroundColor #FEFEFE
actor Développeur as dev
participant "সিস্টেম\nফাইল" as fs
participant "JBake\nমोटর ???\n\nWait I typed incorrectly: Should be Bengali script: মোটর. Ensure correct unicode.\n\nFinal answer: JBake\nমোটর\n\nProceed.\n\n</think>\nJBake\nমোটর" as jbake
participant "Site\nStatique" as site
database "Cache\nJBake" as cache

dev -> fs : /projet-ancien.adoc পোর্টফোলিও মুছে ফেল
activate fs
fs --> dev : ফাইল মুছে ফেলা হয়েছে
deactivate fs

dev -> fs : (ঐচ্ছিক) মুছুন চিত্র সংযুক্ত\nassets/img/portfolio/projet-ancien-*
activate fs
fs --> dev : ইমেজ মুছে ফেলা
deactivate fs

dev -> cache : ক্যাশ পরিষ্কার করুন JBake
activate cache
cache --> dev : ভিডিও ক্যাশ
deactivate cache

dev -> jbake : সম্পূর্ণ পুনর্নির্মাণ (jbake -b)
activate jbake
jbake -> jbake : স্ক্যানার content/portfolio/
jbake -> jbake : প্রোজেক্ট অনুপস্থিত → উৎপন্ন হয়নি
jbake -> jbake : রিজেনারেট portfolio.html\n(অপসারিত প্রকল্প ছাড়া)
jbake -> site : নতুন বিল্ড স্থাপন করুন
deactivate jbake

dev -> site : যাচাই
activate site
site --> dev : তালিকা থেকে অনুপস্থিত প্রজেক্ট
deactivate site
@enduml

বিকল্পিক কৌশল : সংরক্ষণ

শুধুমাত্র মুছে ফেলার পরিবর্তে, একটি ফোল্ডার তৈরি করা সম্ভব।content/portfolio/archive/:

  • ফাইলটি মুছে ফেলার বদলে স্থানান্তর করুন

  • সহজে পুনরুদ্ধার করা যায়

  • গিটের ইতিহাস আরও পরিষ্কার রাখুন

উপকরণ পরিষ্কারন

  • অশ্রেয় ছবি যাচাই করুন`assets/img/portfolio/`

  • অন্য প্রকল্প দ্বারা উল্লেখ করা না থাকা চিত্রগুলো মুছুন

  • JBake ক্যাশ পরিষ্কার করুন ফ্যান্টম রেফারেন্স এড়াতে

UC3 : অপ্রকাশিত (ড্র্যাফট) হিসাবে রাখুন

মানক ফ্ল্যাক্স

@startuml
skinparam backgroundColor #FEFEFE
actor Développeur as dev
participant "ফাইল\nAsciiDoc" as file
participant "JBake\nইঞ্জিন" as jbake
participant "সাইট\nস্ট্যাটিক" as site

dev -> file : পোর্টফোলিও খুলুন/projet.adoc
activate file

dev -> file : পরিবর্তন attribut\n:jbake-status: published\n↓\n:jbake-status: draft

file --> dev : সুরক্ষিত
deactivate file

dev -> jbake : পুনর্নির্মাণ (jbake -b)
activate jbake
jbake -> file : ফাইলকে পার্স করুন
jbake -> jbake : সন্ধান status=draft
jbake -> jbake : published_projects থেকে বাদ দিন
jbake -> jbake : পাবলিক পৃষ্ঠা তৈরি করবেন না
note right
প্রোজেক্টটি এখনও বিদ্যমান আছে
কিন্তু এটি প্রকাশ করা হয়নি
end note
jbake -> site : সাইট তৈরি (এই প্রকল্প ছাড়াই)
deactivate jbake

dev -> site : পোর্টফোলিও যাচাই করুন
activate site
site --> dev : প্রকাশিত তালিকা থেকে প্রকল্প অনুপস্থিত
deactivate site
@enduml

সম্ভাব্য অবস্থা

@startuml
skinparam backgroundColor #FEFEFE

[*] --> Draft : Création initiale
Draft --> Published : যাচাইকরণ এবং প্রকাশন
Published --> Draft : অস্থায়ী উনয়ন
Draft --> Archived : প্রত্যাহারিত প্রকল্প
Published --> Archived : বাতিল প্রকল্প
Archived --> [*] : স্থায়ী মুছে ফেলা
Published --> Published : আপডেট

note right of Draft
:jbake-status: draft
সর্বজনীনভাবে দৃশ্য নয়
চলমান প্রকল্পের জন্য উপযোগী
end note

note right of Published
  :jbake-status: published
  Visible sur le portfolio
  Indexé par JBake
end note

note right of Archived
archive/এ স্থানান্তরিত
অথবা jbake-status: archived
প্রকাশিত নয় কিন্তু সংরক্ষিত
end note
@enduml

প্রয়োগের সাধারণ ক্ষেত্র

  • ড্রাফট প্রকল্প : ড্রাফট তৈরি, প্রকাশ করো যখন prepared

  • অস্থায়ীভাবে গোপনীয় প্রজেক্ট : ড্রাফটে রাখা ক্লায়েন্ট সম্মতির মেয়াদে

  • বড় আপডেট : ড্র্যাফটে যাওয়া, সম্পাদনা করা, পুনঃপ্রকাশ করা

  • A/B testing : ড্রাফটে ডুপ্লিকেট করা, পরীক্ষা করা, শ্রেষ্ঠ সংস্করণটি প্রকাশ করা

টেমপ্লেটিং আর্কিটেকচার

পুনরায় ব্যবহারযোগ্য টেমপ্লেট কৌশল

@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle

package "Templates Thymeleaf" {
  component [index.html] as index
  component [portfolio.html] as portfolio
  component [project.html] as project

  package "Partials" {
    component [header.html] as header
    component [footer.html] as footer
    component [project-card.html] as card
    component [tech-badge.html] as badge
    component [gallery.html] as gallery
  }
}

package "ডেটা JBake" {
  database "published_projects" as data
  database "content (প্রকল্প)" as content
}

index --> header
index --> footer

portfolio --> header
portfolio --> footer
portfolio --> card
data --> portfolio : পুনরাবৃত্তি

project --> header
project --> footer
project --> badge
project --> gallery
content --> project : ব্যক্তিগত প্রকল্প

note right of card
পুনরাবৃত্তি যোগ্য অংশ
একটি প্রকল্প মানচিত্র দেখানোর জন্য
:
- থাম্বনেইল
- শিরোনাম
- ট্যাগ
- হাইলাইটস
end note
@enduml

ডেটা এক্সট্র্যাকশন প্যাটার্ন

JBake স্বয়ংক্রিয়ভাবে AsciiDoc বৈশিষ্ট্য গুলোকে Thymeleaf-এ অ্যাক্সেসযোগ্য বৈশিষ্ট্য-এ রূপান্তর করে:

@startuml
skinparam backgroundColor #FEFEFE

rectangle "AsciiDoc ডকুমেন্ট" {
  (":project-client: অ্যাকমি কর্প") as attr1
  (":project-duration: ৬ মাস") as attr2
  (":project-tags: java, react") as attr3
}

rectangle "JBake মডেল" {
  (content['project-client']) as prop1
  (content['project-duration']) as prop2
  (content.tags) as prop3
}

rectangle "Thymeleaf টেমপ্লেট" {
  (th:text="${project['project-client']}") as tmpl1
  (th:text="${project['project-duration']}") as tmpl2
  (th:each="ট্যাগ : ${project.tags}") as tmpl3
}

attr1 --> prop1 : parsing
attr2 --> prop2 : parsing
attr3 --> prop3 : parsing

prop1 --> tmpl1 : binding
prop2 --> tmpl2 : binding
prop3 --> tmpl3 : binding
@enduml

নামকরণের নিয়মাবলী

  • প্রকল্পের বৈশিষ্ট্য : উপসর্গ`project-*` (ex: project-client, project-tech-stack)

  • ফাইল : kebab-case (ex:`ecommerce-platform.adoc`)

  • ছবি : প্রিফিক্স প্রকল্পের নাম (উদাহরণ:`ecommerce-platform-thumb.jpg`)

  • টেমপ্লেট : ফাংশনাল নাম (উদাহরণ:`project-card.html`, tech-badge.html)

প্রকাশনের ওয়ার্কফ্লো

উন্নয়ন পাইপলাইন

@startuml
skinparam backgroundColor #FEFEFE
skinparam handwritten false

class ProjetAsciiDoc {
  +titre: String
  +jbake-type: "প্রকল্প"
  +jbake-status: published|draft
  +jbake-date: Date
  +jbake-tags: List<String>
  __
  +project-category: String
  +project-client: String
  +project-duration: String
  +project-role: String
  +project-thumbnail: String
  +project-gallery: List<String>
  +project-tech-stack: String
  +project-highlights: List<String>
  +project-demo-url: String
  +project-github-url: String
  __
  +body: HTML (converti)
}

class JBakeEngine {
  +parse(asciidoc)
  +extractMetadata()
  +convertToHTML()
}

class ThymeleafTemplate {
  +portfolio.html
  +project.html
  +partials/project-card.html
}

class PortfolioPage {
  +published_projects: List
  +filtres: categories
}

ProjetAsciiDoc --> JBakeEngine : parse
JBakeEngine --> ThymeleafTemplate : ডেটা সরবরাহ করে
ThymeleafTemplate --> PortfolioPage : উৎপন্ন করে
@enduml

পরিবেশ

পরিবেশ ব্যবহার স্বीकৃত স্ট্যাটাস

স্থানীয়

ডেভেলপমেন্ট এবং প্রিভিউ

প্রলিপি, প্রকাশিত

মঞ্চন

প্রি‑উৎপাদন যাচাই

শুধুমাত্র প্রকাশিত

উৎপাদন

জনসাধারণের সাইট

শুধু প্রকাশিত

প্রসারযোগ্যতা

নতুন বৈশিষ্ট্যের যোগ

ডেটা মডেলকে সমৃদ্ধ করতে, শুধুমাত্র নতুন প্রিফিক্সযুক্ত বৈশিষ্ট্য যোগ করুন।project-* :

  • `project-awards’: পুরস্কার ও স্বীকৃতি'

  • project-testimonial: গ্রাহক উদ্ধৃতি

  • `project-team-size`টিমের আকার

  • project-budget-range: বাজেট রেঞ্জ

এই বৈশিষ্ট্যগুলি স্বয়ংক্রিয়ভাবে টেমপ্লেটে উপলব্ধ হয়, JBake ইঞ্জিনে কোনো পরিবর্তন ছাড়া।

উন্নত শ্রেণীবিন্যাস

@startuml
skinparam backgroundColor #FEFEFE

object Projet {
  project-category = "ওয়েব"
  project-subcategory = "ই-কমার্স"
  project-industry = "রিটেইল"
  project-complexity = "উচ্চ"
}

object Taxonomie {
  categories : [web, mobile, data, devops]
  subcategories : Map<category, List>
  industries : [retail, finance, healthcare, ...]
  complexities : [low, medium, high]
}

Projet --> Taxonomie : শ্রেণিবদ্ধ অনুযায়ী

note right of Taxonomie
অনুমতি দেয় বহু-মানদণ্ড ফিল্টারিং
টেমপ্লেট portfolio.html-এ
JavaScript-এর মাধ্যমে অথবা সার্ভারের পাশ থেকে
end note
@enduml

ভালো অনুশীলন

ফাইল সংগঠন

  • একটি ফাইল = একটি প্রকল্প : একাধিক প্রকল্প মিশ্রণ এড়াতে

  • বিশেষ ফোল্ডারের ছবি :`assets/img/portfolio/nom-projet/`

  • নomenclature সমন্বিত: অনুসন্ধান ও রক্ষণাবেক্ষণ সহজ করে

  • Versioning Git : পরিবর্তন들의 সম্পূর্ণ ট্র্যাকিং

বিষয়বস্তু পরিচালনা

  • ড্রাফট ডিফল্ট স্ট্যাটাস : শুধুমাত্র তখন প্রকাশ কর যখন প্রস্তুত

  • প্রকাশ-পূর্ব সমীক্ষা: গুণমান এবং গোপনীয়তা যাচাই

  • সম্পূর্ণ মেটাডেটা : সব প্রাসঙ্গিক ক্ষেত্র পূর্ণ করুন

  • ধনী নারেটিভ কনটেন্ট : মেটাডেটায় শুধু আটকে থাকবেন না

কর্মক্ষমতা

  • ছবি অপ্টিমাইজেশন: প্রি-কমিট কম্প্রেশন

  • প্যাগিনেশন যদি প্রয়োজন হয় : যদি ২০টির বেশি প্রকল্প

  • Lazy loading : চাহিদা অনুযায়ী লোড করা গ্যালেরি ছবিগুলো

  • ব্রাউজার ক্যাশ : উপযুক্ত হেডারস এসেটসের জন্য

উপসংহার

এই আর্কিটেকচারটি অনুমতি দেয়:

  • সহজ ব্যবহার : একটি প্রকল্প যোগ করুন = একটি টেক্সট ফাইল তৈরি করুন

  • ফ্লেক্সিবিলিটি : নতুন বৈশিষ্ট্য দিয়ে প্রসারনযোগ্য

  • বক্ষণযোগ্যতা : বিষয়বস্তু/প্রস্তুতি বিভাজন

  • অনুসন্ধানযোগ্যতা : সম্পূর্ণ Git versioning

  • অটোমেশন : বিল্ড ও ধ্রুবিক বিন্যাস সম্ভব

AsciiDoc নির্বাচন করে সাইটের বাকি অংশের সাথে সামঞ্জস্য বজায় রাখে এবং এছাড়া একটি পেশাদার পোর্টফোলিওর জন্য প্রয়োজনীয় মেটাডেটার সমৃদ্ধি প্রদান করে।

সম্পর্কিত নিবন্ধ