{"id":1371,"date":"2020-06-25T00:04:26","date_gmt":"2020-06-24T15:04:26","guid":{"rendered":"http:\/\/168.138.214.208\/?p=1371"},"modified":"2020-06-25T00:04:26","modified_gmt":"2020-06-24T15:04:26","slug":"post-1371","status":"publish","type":"post","link":"https:\/\/nobunobu1717.site\/?p=1371","title":{"rendered":"python\u3067DI(Dependency Injection)\u3092\u3084\u308b\u65b9\u6cd5"},"content":{"rendered":"<div id=\"toc_container\" class=\"no_bullets\"><p class=\"toc_title\">Contents<\/p><ul class=\"toc_list\"><li><a href=\"#i\"><span class=\"toc_number toc_depth_1\">1<\/span> \u6982\u8981<\/a><\/li><li><a href=\"#i-2\"><span class=\"toc_number toc_depth_1\">2<\/span> \u74b0\u5883<\/a><\/li><li><a href=\"#i-3\"><span class=\"toc_number toc_depth_1\">3<\/span> \u80cc\u666f<\/a><\/li><li><a href=\"#i-4\"><span class=\"toc_number toc_depth_1\">4<\/span> \u65b9\u6cd5<\/a><\/li><\/ul><\/div>\n<h2><span id=\"i\">\u6982\u8981<\/span><\/h2>\n<p>python\u3067DI\u3067\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u6ce8\u5165\u3059\u308b\u65b9\u6cd5\u306b\u95a2\u3059\u308b\u30e1\u30e2\u3002<\/p>\n<h2><span id=\"i-2\">\u74b0\u5883<\/span><\/h2>\n<p>python 3.7.6<\/p>\n<h2><span id=\"i-3\">\u80cc\u666f<\/span><\/h2>\n<p>python\u306b\u306fC#\u3084Java\u306b\u3042\u308b\u3088\u3046\u306a\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u304c\u5b58\u5728\u3057\u306a\u3044\u305f\u3081\u3001\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u304b\u3089\u30a4\u30f3\u30bf\u30d5\u30a7\u30fc\u30b9\u3092\u6e21\u3057\u3066\u306eDI\u304c\u4e0d\u53ef\u80fd\u3002<br \/>\n\u4ee3\u308f\u308a\u306b\u62bd\u8c61\u30af\u30e9\u30b9\u306e\u4ed5\u7d44\u307f\u3092\u5229\u7528\u3059\u308b\u4e8b\u3067\u5b9f\u73fe\u304c\u53ef\u80fd\u3002<\/p>\n<h2><span id=\"i-4\">\u65b9\u6cd5<\/span><\/h2>\n<h3>\u30aa\u30d6\u30b8\u30a7\u30af\u30c8<\/h3>\n<p>\u307e\u305a\u306f\u4e0b\u8a18\u306e\u3088\u3046\u306aPerson\u30af\u30e9\u30b9\u3092\u5b9a\u7fa9\u3059\u308b\u3002<br \/>\n\u5358\u7d14\u306a\u5024\u3092\u4fdd\u6301\u3059\u308b\u30af\u30e9\u30b9\u3067\u3042\u308b\u3002<\/p>\n<pre class=\"lang:default decode:true \" >\r\nclass Person:\r\n\r\n    def __init__(self, id:str, name:str, age:int):\r\n        self.id = id\r\n        self.name = name\r\n        self.age = age\r\n\r\n    def __repr__(self):\r\n        return f'[id:{self.id}, name:{self.name}, age:{self.age}]'\r\n<\/pre>\n<p>\u3053\u306ePerson\u30af\u30e9\u30b9\u3092\u53d6\u5f97\u3067\u304d\u308b\u3088\u3046\u306a\u30af\u30e9\u30b9\u3092\u62bd\u8c61\u5316\u3057\u3066\u5b9a\u7fa9\u3059\u308b\u3002<\/p>\n<h3>\u5b9f\u73fe\u65b9\u6cd5<\/h3>\n<p>python\u306b\u306f\u7d44\u307f\u8fbc\u307f\u306e\u6a5f\u80fd\u3068\u3057\u3066abc(Abstract Base Class)\u3068\u3044\u3063\u305f\u3082\u306e\u304c\u63d0\u4f9b\u3055\u308c\u3066\u3044\u308b\u3002<br \/>\n\u3053\u306e\u30af\u30e9\u30b9\u3092\u7d99\u627f\u3057\u3066\u62bd\u8c61\u5316\u3057\u305f\u3044\u30e1\u30bd\u30c3\u30c9\u306b\u5bfe\u3057\u3066\u3001abstractmethod\u3092\u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3\u3068\u3057\u3066\u4ed8\u4e0e\u3059\u308b\u3002<br \/>\n\u4e0b\u8a18\u3067\u306f\u3001Person\u3092\u5168\u4ef6\u8fd4\u3059findAll\u30e1\u30bd\u30c3\u30c9\u3092\u5b9a\u7fa9\u3057\u3066\u3044\u308b\u3002<\/p>\n<pre class=\"lang:default decode:true \" >\r\nfrom abc import ABCMeta, abstractmethod\r\nfrom typing import List\r\n\r\nclass AbstractPersonRepository(metaclass=ABCMeta):\r\n\r\n    @abstractmethod\r\n    def findAll(self) -&gt; List[Person]:\r\n        pass\r\n<\/pre>\n<p>\u3053\u306e\u62bd\u8c61\u30af\u30e9\u30b9\u3092\u7d99\u627f\u3057\u3066\u3001\u30e1\u30bd\u30c3\u30c9\u3092\u5b9f\u88c5\u3059\u308b\u3053\u3068\u3067\u5b9f\u73fe\u304c\u53ef\u80fd\u3002<\/p>\n<pre class=\"lang:default decode:true \" >\r\nclass InMemoryPersonRepository(AbstractPersonRepository):\r\n\r\n    def findAll(self) -&gt; List[Person]:\r\n        persons = [\r\n            Person(\"1\", \"Python\u592a\u90ce\", 10),\r\n            Person(\"2\", \"Python\u82b1\u5b50\", 15)\r\n        ]\r\n        return persons\r\n<\/pre>\n<p>\u3042\u3068\u306f\u3001\u3053\u3093\u306a\u611f\u3058\u3067\u62bd\u8c61\u5316\u3055\u308c\u305f\u51e6\u7406\u3092\u5f15\u6570\u3068\u3057\u3066\u53d7\u3051\u53d6\u308b\u30af\u30e9\u30b9\u3092\u5b9a\u7fa9\u3057\u3066\u4f7f\u7528\u3059\u308b\u3002<\/p>\n<pre class=\"lang:default decode:true \" >\r\nclass PersonService:\r\n\r\n    def __init__(self, repository:AbstractPersonRepository):\r\n        self.__repository = repository\r\n\r\n    def findAll(self) -&gt; List[Person]:\r\n        return self.__repository.findAll()\r\n<\/pre>\n<pre class=\"lang:default decode:true \" >\r\nservice = PersonService(InMemoryPersonRepository())\r\npersons = service.findAll()\r\nprint(\"persons:{}\".format(repr(persons)))\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Contents1 \u6982\u89812 \u74b0\u58833 \u80cc\u666f4 \u65b9\u6cd5 \u6982\u8981 python\u3067DI\u3067\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u6ce8\u5165\u3059\u308b\u65b9\u6cd5\u306b\u95a2\u3059\u308b\u30e1\u30e2\u3002 \u74b0\u5883 python 3.7.6 \u80cc\u666f python\u306b\u306fC#\u3084Java\u306b\u3042\u308b\u3088\u3046\u306a\u30a4 &#8230; <\/p>\n","protected":false},"author":1,"featured_media":1361,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[34],"tags":[],"_links":{"self":[{"href":"https:\/\/nobunobu1717.site\/index.php?rest_route=\/wp\/v2\/posts\/1371"}],"collection":[{"href":"https:\/\/nobunobu1717.site\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nobunobu1717.site\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nobunobu1717.site\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/nobunobu1717.site\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1371"}],"version-history":[{"count":1,"href":"https:\/\/nobunobu1717.site\/index.php?rest_route=\/wp\/v2\/posts\/1371\/revisions"}],"predecessor-version":[{"id":1372,"href":"https:\/\/nobunobu1717.site\/index.php?rest_route=\/wp\/v2\/posts\/1371\/revisions\/1372"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nobunobu1717.site\/index.php?rest_route=\/wp\/v2\/media\/1361"}],"wp:attachment":[{"href":"https:\/\/nobunobu1717.site\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1371"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nobunobu1717.site\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1371"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nobunobu1717.site\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1371"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}