আমি এমন একটি প্রোডাক্টে কাজ করছি যেখানে মডিউলগুলির মধ্যে একটির XML ফাইলগুলি পার্স করা এবং প্রয়োজনীয় সামগ্রীটি একটি ডেটাবেজে ডাম্প করা। যদিও বর্তমান প্রয়োজনীয়তাটি কেবলমাত্র এক্সএমএল ফাইলগুলি বিশ্লেষণ করার জন্য, আমি আমার পার্সিং মডিউলটি এমন ফ্যাশনে ডিজাইন করতে চাই যাতে আমি ভবিষ্যতে যে কোনও ধরণের ফাইল সমর্থন করতে পারি। এই পদ্ধতির কারণ হ'ল আমরা একটি নির্দিষ্ট ক্লায়েন্টের জন্য এই পণ্যটি তৈরি করছি তবে অদূর ভবিষ্যতে এটি অন্য ক্লায়েন্টদের কাছে বিক্রি করার পরিকল্পনা রয়েছে। ইকোসিস্টেমের সমস্ত সিস্টেম বর্তমান ক্লায়েন্টের এক্সএমএল ফাইল উত্পাদন এবং ব্যবহার করে তবে অন্যান্য ক্লায়েন্টদের ক্ষেত্রে এটি নাও হতে পারে।
এতক্ষণ আমি কী চেষ্টা করেছি? (বর্তমান) আমার নিম্নলিখিত নকশাগুলি মনে আছে যা কৌশল প্যাটার্নের উপর ভিত্তি করে। আমি আমার ডিজাইনটি জানাতে দ্রুতই কোডটি গ্রহনে লিখে রেখেছি যাতে ব্যতিক্রমগুলি পরিচালনা করার সঠিক উপায়ের মতো যদি এখনই উপেক্ষা করা হয় তবে তা দুর্দান্ত হবে be
পার্সার: কৌশল ইন্টারফেস যা পার্স পদ্ধতি প্রকাশ করে।
public interface Parser<T> {
public T parse(String inputFile);
}
* জেনেরিক প্যারামিটার ব্যবহার করার কারণটি হ'ল যে কোনও রিটার্নের ধরণের অনুমতি দেওয়ার পাশাপাশি সংকলনের সময় ধরণের সুরক্ষা নিশ্চিত করা।
ProductDataXMLParser একটি product.xML ফাইল পার্স করার জন্য একটি কংক্রিট ক্লাস যাতে পণ্য সম্পর্কিত তথ্য থাকে। (এক্সএমএলবিয়ান ব্যবহার করে)
public class ProductDataXmlParser implements Parser<ProductDataTYPE> {
public ProductDataTYPE parse(String inputFile) {
ProductDataTYPE productDataDoc = null;
File inputXMLFile = new File(inputFile);
try {
productDataDoc = ProductDataDocument.Factory.parse(inputXMLFile);
} catch(XmlException e) {
System.out.println("XmlException while parsing file : "+inputXMLFile);
} catch(IOException e) {
System.out.println("IOException while parsing file : "+inputXMLFile);
}
return productDataDoc.getProductData();
}
}
যেখানে : প্রোডাক্ট ডেটাটিওয়াইপি এবং প্রোডাক্টডাটা ডকুমেন্ট হ'ল এক্সএমএলবিয়ান পোজো ক্লাস একটি এক্সএসডি এবং স্কম্প কমান্ড ব্যবহার করে উত্পন্ন generated
ভবিষ্যৎ
ভবিষ্যতে যদি আমার কাছে product.txt ফাইলটি পার্স করা থাকে তবে আমি নিজের নিজস্ব প্রোডো ডেটা সংজ্ঞা দিতে পারি যা প্রোডাক্ট ডেটা বলে যা ফাইলের প্রয়োজনীয় বিষয়বস্তু ধরে রাখবে। এরপরে আমি প্রোডাক্টডাটাফ্ল্যাটফিলি পার্সার নামে একটি কংক্রিট ক্লাস তৈরি করতে পারি যা পার্সার ইন্টারফেসটি প্রয়োগ করে এবং পার্স পদ্ধতিটি ফাইল বিশ্লেষণের পরে আমার জন্য প্রোডাক্ট ডেটা পোজোকে জনপ্রিয় করে তোলে।
এই নকশাটি কি বোধগম্য? এই নকশায় কোন সুস্পষ্ট ত্রুটি আছে? নকশাটি দাঁড়ানোর সাথে সাথে, আমি কংক্রিট ক্লাসগুলিকে একটি ফাইল পার্স করার জন্য অ্যালগরিদম সংজ্ঞায়িত করার অনুমতি দিচ্ছি এবং কংক্রিট শ্রেণিকে ডেটা কোথায় স্থাপন করবে তা সিদ্ধান্ত নিতে দিচ্ছি। ডিজাইনটি ফাইল ফর্ম্যাটের চেয়ে ডোমেন অবজেক্টের উপর বেশি নির্ভরশীল বলে মনে হচ্ছে। এটা কি একটা খারাপ জিনিস? আমি কীভাবে আমার ডিজাইনটি উন্নত করতে পারি তার কোনও ইনপুট অত্যন্ত প্রশংসিত হবে।