জাভাতে ডেটা অ্যাক্সেস অবজেক্ট (ডিএও)


347

আমি একটি দস্তাবেজ দিয়ে যাচ্ছিলাম এবং আমি ডাকা একটি শব্দটি পেলাম DAO। আমি খুঁজে পেয়েছি যে এটি একটি ডেটা অ্যাক্সেস অবজেক্ট। কেউ দয়া করে আমাকে বোঝাতে পারেন যে এটি আসলে কী?

আমি জানি যে এটি বিভিন্ন ধরণের উত্স থেকে ডেটা অ্যাক্সেসের জন্য এক ধরণের ইন্টারফেস, খনি সম্পর্কে এই সামান্য গবেষণার মাঝখানে আমি ডেটা সোর্স বা ডেটা সোর্স অবজেক্ট নামে একটি ধারণা পেয়েছি এবং জিনিসগুলি আমার মনে জড়িয়ে গেছে।

আমি সত্যিই DAOএটি যেখানে এটি ব্যবহার করা হয় সেই পদে প্রোগ্রামগতভাবে কী তা জানতে চাই । কিভাবে এটি ব্যবহার করা হয়? খুব বেসিক স্টাফ থেকে এই ধারণাটি ব্যাখ্যা করা পৃষ্ঠাগুলির যে কোনও লিঙ্ককেও প্রশংসা করা হয়।

উত্তর:


447

ডেটা অ্যাক্সেস অবজেক্ট মূলত একটি অবজেক্ট বা একটি ইন্টারফেস যা অন্তর্নিহিত ডাটাবেস বা অন্য কোনও জেদী স্টোরেজে অ্যাক্সেস সরবরাহ করে।

সেই সংজ্ঞাটি: http://en.wikedia.org/wiki/Data_access_object থেকে

এখানে ক্রম ডায়াগ্রাম চেক করুন: http://www.oracle.com/technetwork/java/dataaccessobject-138824.html

সম্ভবত একটি সহজ উদাহরণ আপনাকে ধারণাটি বুঝতে সহায়তা করতে পারে:

ধরা যাক আমাদের কোনও কর্মচারী প্রতিনিধিত্ব করার একটি সত্তা রয়েছে:

public class Employee {

    private int id;
    private String name;


    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }

}

কর্মচারী সত্তাগুলি Employeeএকটি ডেটাবেজে সংশ্লিষ্ট টেবিল হিসাবে জারি থাকবে । কোনও কর্মচারী সত্তাকে হেরফের করতে প্রয়োজনীয় ডাটাবেস অপারেশন পরিচালনা করার জন্য একটি সাধারণ ডিএও ইন্টারফেসটি হ'ল:

interface EmployeeDAO {

    List<Employee> findAll();
    List<Employee> findById();
    List<Employee> findByName();
    boolean insertEmployee(Employee employee);
    boolean updateEmployee(Employee employee);
    boolean deleteEmployee(Employee employee);

}

এরপরে এসকিউএল সার্ভারের সাথে ডিল করার জন্য আমাদের সেই ইন্টারফেসের জন্য একটি কংক্রিট বাস্তবায়ন করতে হবে এবং অন্য একটি ফ্ল্যাট ফাইলগুলি ডিল করার জন্য


4
হাই রমি, আমি সত্যিই আনন্দিত থাইত, আপনি আমাকে খুব সাধারণ এক্সপেল দিয়ে ব্যাখ্যা করার চেষ্টা করেছিলেন, যা আমার প্রয়োজন ছিল। 'কংক্রিট বাস্তবায়ন' বলতে আপনি কী বোঝাতে চেয়েছিলেন আপনি কি দয়া করে তা ব্যাখ্যা করতে পারেন আপনি কি বোঝাতে চেয়েছিলেন যে পরবর্তী একটি ক্লাসে ইন্টারফেস প্রয়োগ করে পদ্ধতিগুলির সংজ্ঞা আমাদের লিখতে হবে .. ??
ভাসান্থ নাগ কেভি

হ্যা, তা ঠিক. এমপ্লয়ী এসকিউএল
রামি

4
সুতরাং যে সমস্ত ডিএও হয় ?? এটি কেবলমাত্র একটি শ্রেণি যা আমরা ডাটাবেস অ্যাক্সেস করতে লিখছি। যখনই আমাদের ডাটাবেস থেকে কোনও পরিষেবা প্রয়োজন, আমরা একটি ডিএও-র একটি অবজেক্ট তৈরি করি এটি ডাটাবেস ক্রিয়াকলাপের জন্য ব্যবহার করে এবং তারপরে আমরা ডাটাবেস থেকে যা চাই তা পেয়ে গেলে ডিএও থেকে মুক্তি পান। আমি কি সঠিক?? এবং আমি কি এই ডিএও কনসেপ্ট রমির স্কোপটি জানতে পারি ??
ভাসান্থ নাগ কেভি

5
হ্যাঁ, ডিএওর নাম হিসাবে বোঝা যাচ্ছে নির্দিষ্ট সত্ত্বা / শ্রেণি সম্পর্কে অন্তর্নিহিত স্টোরেজ অ্যাক্সেস / আপডেট করার জন্য। সুতরাং উপরের উদাহরণে আমাদের একটি কর্মচারী শ্রেণি / সত্তা রয়েছে যা আমরা অবিরাম থাকার জন্য একটি এসকিউএল সার্ভার ডিবি টেবিল ব্যবহার করি। কর্মচারী ডিএওতে কর্মী (গুলি) সন্নিবেশ / মুছতে / আপডেট করতে / বাছাই করার পদ্ধতি থাকবে
রামি

2
@ ফিলিপরিগোতে আমরা অবশ্যই একাধিক বাস্তবায়ন করতে পারি উদাহরণস্বরূপ একটি এমএসএসকিউএল সার্ভার বাস্তবায়ন এবং অন্য একটি যা সিএসভি ফাইল ব্যবহার করে ইউনিট পরীক্ষার জন্য ব্যবহার করা হয়।
রামি

86

ডেটা অ্যাক্সেস ওবজেট (ডিএও) কী -

এটি একটি অবজেক্ট / ইন্টারফেস , যা ডেটা স্টোরেজের ডেটাবেস থেকে ডেটা অ্যাক্সেস করতে ব্যবহৃত হয় ।

আমরা ডাও ব্যবহার করি কেন:

এটি ডেটাবেস হিসাবে ডেটা রিসোর্স থেকে ডেটা পুনরুদ্ধার বিমূর্ত। ধারণাটি হ'ল "কোনও ডেটা রিসোর্সের ক্লায়েন্ট ইন্টারফেসকে এর ডেটা অ্যাক্সেস মেকানিজম থেকে আলাদা করা "।

সরাসরি ডেটা অ্যাক্সেস করার সমস্যাটি হ'ল ডেটার উত্সটি পরিবর্তন হতে পারে। উদাহরণস্বরূপ বিবেচনা করুন, আপনার অ্যাপ্লিকেশনটি এমন পরিবেশে মোতায়েন করা হয়েছে যা একটি ওরাকল ডাটাবেস অ্যাক্সেস করে। এরপরে এটি এমন একটি পরিবেশে স্থাপন করা হয় যা মাইক্রোসফ্ট এসকিউএল সার্ভার ব্যবহার করে। যদি আপনার অ্যাপ্লিকেশনটি সঞ্চিত পদ্ধতি এবং ডাটাবেস-নির্দিষ্ট কোড ব্যবহার করে (যেমন একটি নম্বর ক্রম তৈরি করে) তবে আপনি কীভাবে আপনার অ্যাপ্লিকেশনটিতে এটি পরিচালনা করবেন? আপনার দুটি বিকল্প রয়েছে:

  • ওরাকেলের পরিবর্তে এসকিউএল সার্ভার ব্যবহার করার জন্য আপনার অ্যাপ্লিকেশনটিকে পুনরায় লিখুন (বা পার্থক্যগুলি পরিচালনা করতে শর্তযুক্ত কোড যুক্ত করুন), বা
  • আপনার অ্যাপ্লিকেশন যুক্তি এবং ডেটা অ্যাক্সেসের মধ্যে একটি স্তর তৈরি করুন


এটি সমস্তই ডিএও প্যাটার্ন হিসাবে পরিচিত, এটিতে নিম্নলিখিতটি গঠিত:

  • ডেটা অ্যাক্সেস অবজেক্ট ইন্টারফেস - এই ইন্টারফেসটি একটি মডেল অবজেক্ট (গুলি) এ সঞ্চালিত মানক ক্রিয়াকে সংজ্ঞায়িত করে
  • ডেটা অ্যাক্সেস অবজেক্ট কংক্রিট ক্লাস - এই শ্রেণিটি ইন্টারফেসের উপরে প্রয়োগ করে। এই শ্রেণিটি ডেটাসোর্স থেকে ডেটা পাওয়ার জন্য দায়বদ্ধ যা ডাটাবেস / এক্সএমএল বা অন্য কোনও স্টোরেজ মেকানিজম হতে পারে।
  • মডেল অবজেক্ট বা মান অবজেক্ট - এই অবজেক্টটি ডিএও ক্লাস ব্যবহার করে পুনরুদ্ধার করা ডেটা সংরক্ষণ করার জন্য গেট / সেট পদ্ধতিযুক্ত সহজ পজো

দয়া করে এই উদাহরণটি পরীক্ষা করুন, এটি বিষয়গুলিকে আরও স্পষ্ট করে পরিষ্কার করবে।

উদাহরণ
আমি ধরে নিচ্ছি এই জিনিসগুলি অবশ্যই অবশ্যই DAO সম্পর্কে আপনার নির্দিষ্ট বোঝা পরিষ্কার করেছে।


13

এন্টারপ্রাইজ অ্যাপ্লিকেশনগুলিতে ডিএও (ডেটা অ্যাক্সেস অবজেক্ট) একটি খুব ব্যবহৃত নকশা প্যাটার্ন। এটি হ'ল মডিউল যা প্রতিটি উত্স থেকে ডেটা অ্যাক্সেস করতে ব্যবহৃত হয় (ডিবিএমএস, এক্সএমএল এবং আরও)। আমি আপনাকে কয়েকটি উদাহরণ পড়ার পরামর্শ দিচ্ছি, যেমন:

ডিএও উদাহরণ

দয়া করে মনে রাখবেন যে আসল ডিএও প্যাটার্নটি প্রয়োগ করার বিভিন্ন উপায় রয়েছে এবং এমন অনেকগুলি ফ্রেমওয়ার্ক রয়েছে যা আপনার কাজকে সহজ করে তুলতে পারে। উদাহরণস্বরূপ, আইবিটিস বা হাইবারনেটের মতো ওআরএম (অবজেক্ট রিলেশনাল ম্যাপিং) ফ্রেমওয়ার্কগুলি জাভা অবজেক্টগুলিতে এসকিউএল প্রশ্নের ফলাফল ম্যাপ করার জন্য ব্যবহৃত হয়।

আশা করি এটি সাহায্য করবে, বাই!


8

ডেটা অ্যাক্সেস অবজেক্ট প্যাটার্ন বা ডিএও প্যাটার্নটি উচ্চ স্তরের ব্যবসায়িক পরিষেবাগুলি থেকে API বা অপারেশনগুলিকে অ্যাক্সেস করতে নিম্ন স্তরের ডেটা পৃথক করতে ব্যবহৃত হয়। নীচে ডেটা অ্যাক্সেস অবজেক্ট প্যাটার্নের অংশগ্রহণকারীরা রয়েছেন।

ডেটা অ্যাক্সেস অবজেক্ট ইন্টারফেস - এই ইন্টারফেসটি একটি মডেল অবজেক্ট (গুলি) এ সঞ্চালিত মানক ক্রিয়াকে সংজ্ঞায়িত করে।

ডেটা অ্যাক্সেস অবজেক্ট কংক্রিট ক্লাস - এই শ্রেণিটি ইন্টারফেসের উপরে প্রয়োগ করে। এই শ্রেণিটি ডেটাসোর্স থেকে ডেটা পাওয়ার জন্য দায়বদ্ধ যা ডাটাবেস / এক্সএমএল বা অন্য কোনও স্টোরেজ মেকানিজম হতে পারে।

মডেল অবজেক্ট বা মান অবজেক্ট - এই অবজেক্টটি ডিএও ক্লাস ব্যবহার করে পুনরুদ্ধার করা ডেটা সংরক্ষণ করার জন্য গেট / সেট পদ্ধতিযুক্ত সহজ পজো।

নমুনা কোড এখানে ..


7

আমি সাধারণ হতে চলেছি এবং জাভার সাথে সুনির্দিষ্ট না কারণ ডিএও এবং ওআরএম সমস্ত ভাষায় ব্যবহৃত হয়।

ডিএও বুঝতে আপনার প্রথমে ওআরএম (অবজেক্ট রেশনাল ম্যাপিং) বুঝতে হবে। এর অর্থ হ'ল যদি আপনার কাছে কলাম "নাম" এবং "বয়স" সহ "ব্যক্তি" নামে একটি সারণী থাকে তবে আপনি সেই টেবিলের জন্য অবজেক্ট-টেম্পলেট তৈরি করতে পারেন:

type Person {
name
age
}

এখন ডিএওর সাহায্যে কিছু নির্দিষ্ট প্রশ্ন লেখার পরিবর্তে, সমস্ত ব্যক্তিকে আনা, আপনি যে ধরণের ডিবি ব্যবহার করছেন তার জন্য (যা ত্রুটি-প্রবণ হতে পারে) পরিবর্তে আপনি যা করেন:

list persons = DAO.getPersons();
...
person = DAO.getPersonWithName("John");
age = person.age;

আপনি নিজে ডিএও বিমূর্তিটি লেখেন না, পরিবর্তে এটি আপনি কোন ভাষা এবং কাঠামো ব্যবহার করছেন তার উপর নির্ভর করে সাধারণত কিছু ওপেনসোর্স প্রকল্পের অংশ।

এখন এখানে মূল প্রশ্ন। " .. যেখানে এটি ব্যবহৃত হয় .. "। ভাল আপনি যদি জটিল ব্যবসা এবং ডোমেন নির্দিষ্ট কোড লিখছেন তবে ডিএও ছাড়াই আপনার জীবন খুব কঠিন হবে। অবশ্যই আপনার দেওয়া ওআরএম এবং ডিএও ব্যবহার করার দরকার নেই, পরিবর্তে আপনি নিজের বিমূর্ততা এবং নেটিভ কোয়েরি লিখতে পারেন। আমি অতীতে এটি করেছি এবং প্রায় সবসময় পরে অনুশোচনা করেছি।


6

আমি মনে করি সর্বোত্তম উদাহরণ (ব্যাখ্যা সহ) আপনি ওরাকল ওয়েবসাইটে খুঁজে পেতে পারেন: এখানে । অন্য একটি ভাল টিউটোরিয়াল এখানে পাওয়া যেতে পারে ।


2
এটি কি কেবল আমিই নাকি বেশিরভাগ জাভা টিউটোরিয়াল এবং তথ্য সাইটগুলি অতি প্রাচীন? সেই টিউটোরিয়ালটি ২০০৮ সালের! বিভিন্ন জাভা বিষয়ে শীর্ষস্থানীয় অনুসন্ধানের ফলাফলগুলি আরও পুরানো।
bergie3000

2
@ বার্গি 3000: এই প্যাটার্নটি নতুন নয়।
বং রিকিমারু

5

খুব বেশি ব্যাখ্যায় বিভ্রান্ত হবেন না। ডিএও: নাম থেকেই এটি অর্থ অবজেক্ট ব্যবহার করে ডেটা অ্যাক্সেস করা। ডিএও অন্যান্য বিজনেস লজিক থেকে পৃথক।


4

ডেটা অ্যাক্সেস অবজেক্ট ডেটা পাওয়ার এবং সঞ্চয় করার জন্য ডেটা উত্সের সাথে সংযোগ পরিচালনা করে t এটি ডাটা উত্সটিতে স্বচ্ছ অ্যাক্সেস সক্ষম করার জন্য ব্যবসায়িক অবজেক্টের জন্য অন্তর্নিহিত ডেটা অ্যাক্সেস বাস্তবায়নকে বিমূ .় করে। একটি ডেটা উত্স কোনও ডাটাবেস যেমন কোনও আরডিবিএমএস, এক্সএমএল সংগ্রহস্থল বা ফ্ল্যাট ফাইল সিস্টেম ইত্যাদি হতে পারে could


4

স্প্রিং জেপিএ ডিএও

উদাহরণস্বরূপ আমাদের কিছু সত্তা গ্রুপ রয়েছে।

এই সত্তার জন্য আমরা সংগ্রহস্থল গ্রুপপরিবর্তন তৈরি করি।

public interface GroupRepository extends JpaRepository<Group, Long> {   
}

তারপরে আমাদের একটি পরিষেবা স্তর তৈরি করতে হবে যা দিয়ে আমরা এই সংগ্রহস্থলটি ব্যবহার করব।

public interface Service<T, ID> {

    T save(T entity);

    void deleteById(ID id);

    List<T> findAll();

    T getOne(ID id);

    T editEntity(T entity);

    Optional<T> findById(ID id);
}

public abstract class AbstractService<T, ID, R extends JpaRepository<T, ID>> implements Service<T, ID> {

    private final R repository;

    protected AbstractService(R repository) {
        this.repository = repository;
    }

    @Override
    public T save(T entity) {
        return repository.save(entity);
    }

    @Override
    public void deleteById(ID id) {
        repository.deleteById(id);
    }

    @Override
    public List<T> findAll() {
        return repository.findAll();
    }

    @Override
    public T getOne(ID id) {
        return repository.getOne(id);
    }

    @Override
    public Optional<T> findById(ID id) {
        return repository.findById(id);
    }

    @Override
    public T editEntity(T entity) {
        return repository.saveAndFlush(entity);
    }
}

@org.springframework.stereotype.Service
public class GroupServiceImpl extends AbstractService<Group, Long, GroupRepository> {

    private final GroupRepository groupRepository;

    @Autowired
    protected GroupServiceImpl(GroupRepository repository) {
        super(repository);
        this.groupRepository = repository;
    }
}

এবং নিয়ন্ত্রকের মধ্যে আমরা এই পরিষেবাটি ব্যবহার করি।

@RestController
@RequestMapping("/api")
class GroupController {

    private final Logger log = LoggerFactory.getLogger(GroupController.class);

    private final GroupServiceImpl groupService;

    @Autowired
    public GroupController(GroupServiceImpl groupService) {
        this.groupService = groupService;
    }

    @GetMapping("/groups")
    Collection<Group> groups() {
        return groupService.findAll();
    }

    @GetMapping("/group/{id}")
    ResponseEntity<?> getGroup(@PathVariable Long id) {
        Optional<Group> group = groupService.findById(id);
        return group.map(response -> ResponseEntity.ok().body(response))
                .orElse(new ResponseEntity<>(HttpStatus.NOT_FOUND));
    }

    @PostMapping("/group")
    ResponseEntity<Group> createGroup(@Valid @RequestBody Group group) throws URISyntaxException {
        log.info("Request to create group: {}", group);
        Group result = groupService.save(group);
        return ResponseEntity.created(new URI("/api/group/" + result.getId()))
                .body(result);
    }

    @PutMapping("/group")
    ResponseEntity<Group> updateGroup(@Valid @RequestBody Group group) {
        log.info("Request to update group: {}", group);
        Group result = groupService.save(group);
        return ResponseEntity.ok().body(result);
    }

    @DeleteMapping("/group/{id}")
    public ResponseEntity<?> deleteGroup(@PathVariable Long id) {
        log.info("Request to delete group: {}", id);
        groupService.deleteById(id);
        return ResponseEntity.ok().build();
    }    
}

এটি মূল লেখকদের অনুরোধ অনুযায়ী ডিএও প্যাটার্নটি নয়, রেপোজিটরি প্যাটার্নটি ব্যাখ্যা করছে বলে মনে হচ্ছে। অতিরিক্তভাবে আমি বিশ্বাস করি যে আপনার ইন্টারফেসের মতো সংগ্রহের মতো পদ্ধতির অনুসরণ করা উচিত বলে আপনার উদাহরণটি বিভ্রান্তিমূলক হতে পারে, সুতরাং আপনার কিছু অপারেশন উপযুক্ত নয়।
জান হাসেন

2

ডিএও হ'ল তিন স্তরের আর্কিটেকচারে "পার্সিস্টিশন ম্যানেজার" এর মতো একটি কাজ, পাশাপাশি ডিএও প্যাটার্নও ডিজাইন করেন কারণ আপনি "গ্যাং অফ ফোর" বইয়ের পরামর্শ নিতে পারেন। আপনার অ্যাপ্লিকেশন পরিষেবা স্তরটি ডিএওর পদ্ধতির গোপন এবং অভ্যন্তরীণ বিবরণ না জেনে কেবল ডিএও ক্লাসের পদ্ধতিটি কল করতে হবে।


2

দাও ক্ল্যাসগুলি জেডিবিসি লজিক পুনরায় ব্যবহার করতে ব্যবহৃত হয় এবং দাও (ডেটা অ্যাক্সেস অবজেক্ট) একটি ডিজাইনের ধরণ। দাও একটি সাধারণ জাভা শ্রেণি যা জেডিবিসি যুক্তিযুক্ত।

ডেটা অ্যাক্সেস লেয়ার পৃথক ব্যবসার লজিক স্তর এবং ধ্রুবক স্তরে ভাল প্রমাণিত হয়েছে। ডিএও ডিজাইনের প্যাটার্নটি তার ক্লায়েন্টদের কাছ থেকে ডেটা অ্যাক্সেস বাস্তবায়ন পুরোপুরি গোপন করে

জাভা ডেটা অ্যাক্সেস অবজেক্ট (জাভা ডিএও) ব্যবসায়িক অ্যাপ্লিকেশনগুলির একটি গুরুত্বপূর্ণ উপাদান। ব্যবসায়িক অ্যাপ্লিকেশনগুলির প্রায়শই রিলেশনাল বা অবজেক্ট ডাটাবেসগুলি থেকে ডেটা অ্যাক্সেসের প্রয়োজন হয় এবং জাভা প্ল্যাটফর্ম এই ডেটা অ্যাক্সেস করার জন্য অনেক কৌশল সরবরাহ করে। প্রাচীনতম এবং সবচেয়ে পরিপক্ক কৌশলটি জাভা ডাটাবেস কানেক্টিভিটি (জেডিবিসি) এপিআই ব্যবহার করা, যা একটি ডাটাবেসের বিরুদ্ধে এসকিউএল কোয়েরি কার্যকর করার সক্ষমতা সরবরাহ করে এবং ফলাফলগুলি একবারে এক কলামে আনতে সক্ষম হয়।


1

পজো জাভাতে মডেল ক্লাস হিসাবেও বিবেচনা করে যেখানে আমরা ব্যক্তিগতভাবে সংজ্ঞায়িত নির্দিষ্ট ভেরিয়েবলের জন্য গেটর এবং সেটার তৈরি করতে পারি। মনে রাখবেন যে সমস্ত ভেরিয়েবলগুলি এখানে প্রাইভেট সংশোধক হিসাবে ঘোষিত হয়েছে

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.