




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、基于.NET的可重用數(shù)據(jù)訪問(wèn)層的構(gòu)建作者:王遠(yuǎn)斌摘要:有人提出一種新的數(shù)據(jù)訪問(wèn)層的N層架構(gòu)的設(shè)計(jì)解決方案。它可以解決多種問(wèn)題,例如:低效率的開(kāi)發(fā),移植、更新和重用過(guò)程中的困難。該解決方案采用了.NET的反射技術(shù)和設(shè)計(jì)模式。這種解決方案的一種典型應(yīng)用表明:新的數(shù)據(jù)訪問(wèn)層的解決方案的性能優(yōu)于目前的N層架構(gòu)。更重要的是,應(yīng)用表明:新的數(shù)據(jù)訪問(wèn)層的解決方案可以有效地重用。關(guān)鍵詞:N層架構(gòu);數(shù)據(jù)訪問(wèn)層;反射技術(shù);重用1 引言在軟件開(kāi)發(fā)過(guò)程中,軟件系統(tǒng)的結(jié)構(gòu)設(shè)計(jì)一直發(fā)揮著關(guān)鍵的作用。對(duì)于大型企業(yè)級(jí)應(yīng)用來(lái)說(shuō),系統(tǒng)架構(gòu)不僅影響系統(tǒng)設(shè)計(jì)和系統(tǒng)開(kāi)發(fā),而且與后續(xù)系統(tǒng)開(kāi)發(fā)有直接聯(lián)系,它甚至可以決定整個(gè)系統(tǒng)的開(kāi)發(fā)是否成
2、功。目前,由于其明顯的優(yōu)勢(shì),N層架構(gòu)已經(jīng)成為一種標(biāo)準(zhǔn)的構(gòu)建企業(yè)級(jí)應(yīng)用。然而,當(dāng)前龐大而復(fù)雜的N層體系架構(gòu)出現(xiàn)了一些問(wèn)題,例如:低效率的開(kāi)發(fā),移植、更新和重用過(guò)程中的困難。文中提出了基于.NET技術(shù)和N層架構(gòu)的解決方法,即如何建立一種新的利用反射和工廠模式的數(shù)據(jù)訪問(wèn)層。2 N層架構(gòu)的采用N層架構(gòu)是一種基于雙層架構(gòu)的新型軟件結(jié)構(gòu),以便于有效地處理大規(guī)模分布應(yīng)用中的問(wèn)題。在雙層架構(gòu)中,客戶端的數(shù)據(jù)庫(kù)和業(yè)務(wù)邏輯的存儲(chǔ)程序是一個(gè)抽象和自我管理的應(yīng)用邏輯層,這種存儲(chǔ)程序也納入了應(yīng)用服務(wù)器中。通過(guò)這種方式,N層架構(gòu)應(yīng)運(yùn)而生。在N層架構(gòu)中,業(yè)務(wù)邏輯在應(yīng)用服務(wù)器中,應(yīng)用服務(wù)器中包含了業(yè)務(wù)規(guī)則、數(shù)據(jù)處理等。N層架
3、構(gòu)具有以下優(yōu)點(diǎn):良好的透明性和封裝;高內(nèi)聚、低耦合;易擴(kuò)展、易更新、重用性好;便于開(kāi)發(fā)者合作;高效率的開(kāi)發(fā)。最常見(jiàn)的N層架構(gòu)有三個(gè)不同的層次,包括用戶界面、業(yè)務(wù)邏輯層和數(shù)據(jù)訪問(wèn)層。用戶界面層僅僅是一種用來(lái)處理用戶界面應(yīng)用程序的軟件,它的主要任務(wù)是實(shí)現(xiàn)服務(wù)器和客戶端的通信??梢允且粋€(gè)網(wǎng)頁(yè),或者是傳統(tǒng)的命令提示符界面。這一層還負(fù)責(zé)獲取用戶的數(shù)據(jù)輸入,并將他們傳遞給業(yè)務(wù)邏輯層。業(yè)務(wù)邏輯層包含了業(yè)務(wù)規(guī)則、數(shù)據(jù)處理等,這層并不知道任何關(guān)于HTML及怎樣將其輸出的信息。它不關(guān)心ADO或SQL,這些任務(wù)分配它相應(yīng)的上層或下層來(lái)完成。這層的核心職能是接收用戶界面的請(qǐng)求、按照有關(guān)的業(yè)務(wù)邏輯處理請(qǐng)求、發(fā)送請(qǐng)求并接
4、收相應(yīng)的結(jié)果,將這些結(jié)果返回給用戶界面層。數(shù)據(jù)訪問(wèn)層是整個(gè)架構(gòu)的最底層,它為業(yè)務(wù)邏輯層提供數(shù)據(jù)服務(wù),在一些數(shù)據(jù)存儲(chǔ)(關(guān)系型數(shù)據(jù)庫(kù)和XML等)中存儲(chǔ)或檢索數(shù)據(jù)。3 .Net中的反射和工廠模式3.1 .NET中的反射在.NET中,使用CLR(公共語(yǔ)言運(yùn)行庫(kù))提供反射技術(shù),這種技術(shù)可以在運(yùn)行時(shí)獲得包含在集合中的信息類型。通常,.NET應(yīng)用程序包括如下幾部分:組件,模塊和類型。反射提供了一種編程方式,并且允許程序員在運(yùn)行時(shí)檢查類型信息并對(duì)這些類型調(diào)用方法。例如,一個(gè)組件是一個(gè)可重用和可自我描述的通用語(yǔ)言運(yùn)行庫(kù)應(yīng)用程序的構(gòu)件。它可以在運(yùn)行時(shí)加載組件,并獲得該組件中的所有類型。類型是獲取元數(shù)據(jù)的主要手段,
5、可以作為映像API的門戶。它提供了多種方法來(lái)獲取類型聲明的信息,如構(gòu)造函數(shù)、屬性、方法和事件。方法信息包括方法的信息,可以發(fā)現(xiàn)方法的屬性,并提供元數(shù)據(jù)的獲取方法。它給出了方法的名稱、參數(shù),返回它的值,甚至還可以調(diào)用該方法。通過(guò)反射技術(shù),可以實(shí)現(xiàn)多種功能,例如:創(chuàng)建一種類型的實(shí)例,將這一類型與當(dāng)前的對(duì)象綁定以及獲得目前對(duì)象的類型。當(dāng)應(yīng)用程序在運(yùn)行中為了執(zhí)行某一操作需要加載一個(gè)特殊類型時(shí),可以使用反射技術(shù)。3.2 工廠模式伯特蘭·邁耶建議軟件實(shí)體應(yīng)該是可擴(kuò)展的,但是不可修改的。GOF(Gang of Four:四人組)的工廠模式在一定程度上遵守這種原則,并已在軟件開(kāi)發(fā)中獲得了廣泛的應(yīng)用。
6、工廠模式負(fù)責(zé)建立有公共接口的類型的實(shí)例。通過(guò)工廠模式,某些類型的實(shí)例可以被動(dòng)態(tài)地創(chuàng)建,而不需要預(yù)先了解類型名稱的信息。4 數(shù)據(jù)訪問(wèn)層的設(shè)計(jì)雖然目前流行的幾種多層結(jié)構(gòu)(包括3層、4層和5層)比以往發(fā)揮著更為重要的作用,但是,當(dāng)系統(tǒng)龐大而且數(shù)據(jù)庫(kù)復(fù)雜時(shí),多層結(jié)構(gòu)的開(kāi)發(fā)似乎仍然很困難。現(xiàn)有的框架直接采用存儲(chǔ)過(guò)程或程序中的SQL語(yǔ)句。因此,大量的SQL語(yǔ)句需要組建,使得數(shù)據(jù)訪問(wèn)層的工作量巨大、效率低,甚至導(dǎo)致移植和更新困難。.NET的反射技術(shù)與工廠模式的結(jié)合產(chǎn)生了一種新的數(shù)據(jù)訪問(wèn)層的解決方案。在數(shù)據(jù)庫(kù)轉(zhuǎn)換時(shí),工廠模式使你可以輕而易舉地更新系統(tǒng)?;贠OP(面向?qū)ο蟮某绦蛟O(shè)計(jì)),開(kāi)發(fā)人員從繁重的工作和復(fù)
7、雜的SQL語(yǔ)言中解放了出來(lái)。所有的SQL語(yǔ)句將由開(kāi)發(fā)人員熟悉的OOP構(gòu)建,與此同時(shí),新的數(shù)據(jù)訪問(wèn)層具有較高的重用性和靈活性,從而避免了過(guò)去的無(wú)意義而又重復(fù)的開(kāi)發(fā)。這項(xiàng)設(shè)計(jì)的的原理包括:1) 使用工廠模式構(gòu)建數(shù)據(jù)訪問(wèn)層,以便于克服數(shù)據(jù)庫(kù)轉(zhuǎn)換引起的問(wèn)題;2) 利用反射技術(shù)動(dòng)態(tài)構(gòu)建所需的SQL語(yǔ)句,以避免頻繁的、低效的SQL語(yǔ)句編寫;3) 引入數(shù)據(jù)實(shí)體層;4) 引入數(shù)據(jù)訪問(wèn)子層框架子層,并實(shí)現(xiàn)再利用。數(shù)據(jù)訪問(wèn)層的設(shè)計(jì)如下:1) 引入數(shù)據(jù)實(shí)體層在這個(gè)解決方案中,通過(guò)ORM(對(duì)象關(guān)系映射),所有的數(shù)據(jù)實(shí)體作為作為一個(gè)單一的層數(shù)據(jù)實(shí)體層取出。通過(guò)這種方式,對(duì)象將被映射到RMDB(關(guān)系映射數(shù)據(jù)庫(kù))中。當(dāng)對(duì)數(shù)
8、據(jù)庫(kù)執(zhí)行操作時(shí),程序員就不再需要處理復(fù)雜的SQL語(yǔ)句了,它可以像對(duì)象一樣被處理。與此同時(shí),數(shù)據(jù)實(shí)體以對(duì)象的形式顯示數(shù)據(jù),并且以消息的形式在層與層之間發(fā)送和接收。2) 數(shù)據(jù)訪問(wèn)層的設(shè)計(jì)本解決方案中,數(shù)據(jù)訪問(wèn)層被分為兩個(gè)子層,DASL子層和框架子層。這種新型架構(gòu)的結(jié)構(gòu)如圖1所示。DASL子層不再直接與數(shù)據(jù)庫(kù)進(jìn)行通信,它只負(fù)責(zé)封裝業(yè)務(wù)邏輯層的請(qǐng)求并將信息傳送給下層??蚣茏訉咏邮丈蠈拥恼?qǐng)求,然后自動(dòng)創(chuàng)建所有的SQL語(yǔ)句。該框架子層獨(dú)立于應(yīng)用程序,因此可以高度地重復(fù)使用。居中框架子層的結(jié)構(gòu)如圖2所示。具體描述如下:1) 查詢語(yǔ)句這個(gè)類的核心功能是創(chuàng)建SQL語(yǔ)句,以下面的查詢語(yǔ)句為例:“SELECT fi
9、eld FROM table name WHERE condition ORDER BY sort”.由于該表已經(jīng)被映射到實(shí)體類中,諸如字段、表名、條件和排序的變量就可以通過(guò)使用.NET的反射技術(shù)獲得了。居中例如,構(gòu)成SQL語(yǔ)句:Select * from table name where condition的構(gòu)造函數(shù)如下:public Query Statement (object obj) this.dataType = obj.GetType (); this. fields = "*" this. filter = ParseObjectFilter (obj);
10、正如上面的代碼所示,首先,輸入對(duì)象的類型可以通過(guò)反射獲得,這樣更容易獲得表名。其次,在”ParseObjectFilter ()”方法中,當(dāng)前對(duì)象的所有字段可以使用反射來(lái)構(gòu)造查詢條件字符串。2) 存儲(chǔ)管理器這種類型的主要作用是執(zhí)行SQL語(yǔ)句。根據(jù)輸入對(duì)象的實(shí)例,它通過(guò)調(diào)用查詢語(yǔ)句的方法來(lái)形成SQL語(yǔ)句,然后使用ADO.NET執(zhí)行該語(yǔ)句,并將執(zhí)行結(jié)果返回給上層。以查詢語(yǔ)句Select * from table name where condition為例:public static void LoadDataSet (QueryStatement query, Datasets dataSet)
11、 cmd.CommandText = query.ToString (); adapter.SelectCommand = cmd; (DbDataAdapter) adapter).Fill (dataSet, query.DataSetTable); 應(yīng)該注意到,輸入的對(duì)象”query”已包含了構(gòu)造的SQL語(yǔ)句。5 通告系統(tǒng)應(yīng)用程序現(xiàn)在來(lái)介紹被稱為通告系統(tǒng)的應(yīng)用程序,它采用了上面提到的數(shù)據(jù)訪問(wèn)層。這種系統(tǒng)是一種自動(dòng)通知和信息采集系統(tǒng),常在突發(fā)事件中被用來(lái)自動(dòng)收集和發(fā)出信息,例如災(zāi)難恢復(fù)和保持事務(wù)連續(xù)性。這一系統(tǒng)的原理如圖3所示。該系統(tǒng)的功能包括通知快速行動(dòng)部分、調(diào)動(dòng)快速行動(dòng)組、更新管理系統(tǒng)
12、、達(dá)到警戒線時(shí)預(yù)警并發(fā)送預(yù)警信息,以及發(fā)送信息和指令。居中應(yīng)用程序在.NET平臺(tái)上開(kāi)發(fā),開(kāi)發(fā)語(yǔ)言采用C#,數(shù)據(jù)庫(kù)操作系統(tǒng)是SQL Server 2000,系統(tǒng)基于B/S構(gòu)建,用戶接口使用ASP.NET開(kāi)發(fā)。圖1中所示的N層架構(gòu)被采用了,即在原來(lái)系統(tǒng)中使用的被證明是正確和可靠的架構(gòu)被直接引入了該系統(tǒng)。由于包含框架子層,數(shù)據(jù)訪問(wèn)層的采用簡(jiǎn)化了數(shù)據(jù)實(shí)體層的封裝,使開(kāi)發(fā)人員擺脫了數(shù)據(jù)實(shí)體層的封裝,允許面向?qū)ο蟮臄?shù)據(jù)庫(kù)操作,這種操作讓開(kāi)發(fā)人員從處理復(fù)雜SQL語(yǔ)句中解放了出來(lái)。另外,由于這層的高度重用性,開(kāi)發(fā)過(guò)程被縮短,開(kāi)發(fā)效率明顯提高。6 結(jié)論文中介紹了一種新的數(shù)據(jù)庫(kù)訪問(wèn)層設(shè)計(jì)解決方案,該方案采用了反射
13、技術(shù)和設(shè)計(jì)模式。這種解決方案適用于典型的系統(tǒng)并且執(zhí)行良好。致謝非常感謝重慶大學(xué)的王晶、蔡華和徐紅的幫助。參考文獻(xiàn)1Zhang P, Tang F, Lin G.軟件架構(gòu)設(shè)計(jì)在XP中的實(shí)施J. 計(jì)算機(jī)工程與應(yīng)用, 2003, 39 (33): 106-109. 2Simon R, Ollie C. C#高級(jí)編程 M.第1版.北京: 清華大學(xué)出版社, 2002: 339-348.3Yan H. Java與模式 M. 第1版.北京:電子工業(yè)出版社,2004.127-206. 4Xu H, Xu L.基于.NET的信息管理系統(tǒng)J. 武漢工程學(xué)院, 2003, 15(2): 39-41. 5Wang Y
14、, Chen P.反射技術(shù)與軟件的適應(yīng)性J. 計(jì)算機(jī)工程與設(shè)計(jì), 2003, 24(10): 26-29. 6Xu W, He J, Zhang J, et al.基于反射技術(shù)的動(dòng)態(tài)界面的實(shí)現(xiàn)J. 計(jì)算機(jī)工程與設(shè)計(jì), 2003, 24 (10): 57-59. 7Hu Y, Peng L, Chi C.基于.NET的三層架構(gòu)設(shè)計(jì) J. 計(jì)算機(jī)工程與設(shè)計(jì), 2003, 29 (8): 173-175.Construction of a reusable data access layer based on .NETWANG Yuan-binAbstract: A new design solut
15、ion of data access layer for N-tier architecture is presented. It can solve the problems such as low efficiency of development and difficulties in transplantation update and reuse. The solution utilizes the reflection technology of .NET and design pattern. A typical application of the solution demon
16、strates that the new solution of data access layer performs better than the current N-tier architecture. More importantly, the application suggests that the new solution of data access layer can be reused effectively. Keywords: N-tier architecture; data access layer; reflection technology; reuse 1 I
17、ntroduction In the course of software development, the architecture design of software system plays a key role all the time. For large enterprise application, the system architecture can influence not only the system design and the system development, but also the follow-up development of the system
18、 directly. It can even determine whether the whole system development is successful. Currently, because of its obvious advantages, N-tier architecture has already become a standard of structuring enterprise application. However, at present, the enormous and complex N-tier architecture has some probl
19、ems, such as low efficiency of development, and difficulties in transplantation, update and reuse. Based on .Net technology and N-tier architecture, this paper puts forward a solution to how to build a new data access layer by utilizing reflection and factory pattern.2 Introduction of N-tier archite
20、ctureN-tier architecture is a new kind of software architecture based on two-tier architecture in order to deal with the problems of large scale distribution applications effectively. The storage procedure of database and business logic of a client in two-tier architecture is an abstracted and self-
21、governed application logical layer, which is incorporated in the application server. In this way, N-tier architecture comes into being. In N-tier architecture, business logic is in application server. Application server contains business rules, data manipulation, etc. This N-tier architecture has th
22、e following advantages: good transparent and encapsulation; high cohesiveness and low coupling; easy to expand, update and reuse; convenient for developers to cooperate; and improved efficiency for development. The most commonly N-tier architecture has three distinct layers, including user interface
23、, business logical layer and data access layer. A user interface layer is only a piece of software that deals with the user interface of an application. This layer is responsible for the communication between the server and client. It can be a web page or a traditional order prompt interface. This l
24、ayer is also responsible for accessing the data a user inputs and transmitting them to the business logical layer. A business Logic Layer contains the business rules, data manipulation, etc. This layer does not know anything about HTML and how to output it. It does not care about ADO or SQL. Those t
25、asks are assigned to each corresponding layer above or below it. The core functions of the layer are accepting request from the users interface, dealing with the request according to relevant business logic, sending out request and receiving corresponding result and returning the result to the user
26、interface layer. The data access layer is the bottom layer of the whole architecture, which provides the business logic layer with data services, and stores or retrieves data in some data store (RDBMS, XML etc.).3 Reflection in .NET and factory pattern3.1 Reflection in .NETIn .NET, CLR (common langu
27、age runtime) provides reflection technology by which information about types contained in an assembly at runtime can be obtained. Usually, applications in .NET have several parts as follows: assemblies, modules and types. Reflection provides a kind of programming way, and allows a programmer to insp
28、ect type information and invoke methods on those types at runtime. For example, an assembly is a reusable and self describing building block of a Common Language Runtime application. It can load assembly at runtime, and get all the types in that assembly. Type is the primary means by which metadata
29、can be accessed and it acts as a gateway to reflection API. It provides methods for obtaining information about a type declaration, such as the constructors, properties, methods and events. Method Information, including the information of a method, discovers the attributes of a method and provides a
30、ccess to method metadata. It provides the name, the parameters of a method, returns its value, and even calls it. Through the reflection technology, many functions can be realized, such as creating instance of a type, binding the type to a current object and obtaining the type from a current object.
31、 Reflection can be used when the application program need to load one special type at runtime in order to implement a task. 3.2 Factory patternBertrand Meyer proposed that software entities should be open for extension, but close for modification. GOF's Factory Pattern complied with the principl
32、e to a certain degree and has already won extensive application in software development. Factory pattern is responsible for building the instance of type which has the common interface. Through factory pattern, the instance of some type can be dynamically created, without information about type name
33、 in advance. 4 Design of data access layerThough several kinds of multi-tier frameworks that prevail at present (including 3-tier, 4-tier, and 5-tier) have played a greater role than ever, the development of multi-tier still seems difficult when a system is huge and the database is complicated. The
34、existing framework adopts the store procedure or SQL sentences in the program directly. Hence, a large number of SQL sentences need to be constructed, which make the work load of data access layer enormous and inefficient, even cause difficulties in transplantation and update. Combining the reflecti
35、on technology of .NET with factory pattern gives rise to a new solution of data access layer. Factory pattern offers easy update to the system when the database is switched. Based on OOP, the developers are liberated from heavy work and complicated SQL language. All of the SQL sentences will be buil
36、t up by OOP with which a developer is familiar. Meanwhile, the new data access layer is of high reuse and flexibility. It avoids meaningless and repeated development in the past. The Philosophy of design involves1) Using the factory pattern to construct the data access layer so as to overcome the pr
37、oblems caused by database switching;2) Utilizing reflection technology to construct required SQL sentences dynamically to avoid the frequent and inefficient write of SQL sentences;3) Importing the data entity layer; and4) Importing the data access sub layer-framework sub layer, and realize the reuse
38、.The data access layer is designed as follows. 1) Import the data entity layer In this solution, through ORM (Object-Relational Mapping), all data entities are taken out as a single layer, data entity layer. In this way, objects will be, mapped to RMDB. When manipulate database, programmers do not n
39、eed to deal with complicated SQL sentences any more. It can be handled like an object. Meanwhile, the data entities display the data in the form of object. They are sent and received as messages between layers. 2) Design of the data access layer In this solution, data access layer is divided into tw
40、o sub layers, DASL sub layer and framework sub layer. The structure of this new architecture is illustrated in Fig.1. Now DASL sub layer no longer communicates with database directly. It only encapsulates the request from BL layer and sends message to a lower layer. The framework sub layer receives
41、the request from upper layer, and then builds all SQL sentences automatically. The framework sub layer is independent from application, so can be highly reused.The structure of the framework sub layer is illustrated in Fig. 2, and described below. 1) Query Statement The core function of this class i
42、s to build SQL sentences. Take a query sentence for example: “SELECT field FROM tablename WHERE condition ORDER BY sort”.Because the tables have been mapped to entity classes, variables such as field, tablename, condition and sort, can be obtained by using the reflection of .NET.For example, the con
43、struction function which constructs the SQL sentence Select * from table name where condition is like this: public Query Statement (object obj) this.dataType = obj.GetType (); this.fields = "*" this.filter = ParseObjectFilter (obj); As the above code shows, firstly, the type of input objec
44、t can be gotten by using the reflection, which makes it easy to get the table name. Secondly, in method ParseObjectFilter (), all fields of current object are obtained by utilizing reflection to construct the query condition string.2) Persistence manager The principal function of this type is to exe
45、cute SQL sentences. According to the instance of input object, it forms SQL sentences by calling the method of query statements, then executes SQL sentences by using ADO.NET and returns the result to the upper layer.Take the query sentence Select * from tablename where condition for example:public s
46、tatic void LoadDataSet (QueryStatement query, DataSet dataSet) cmd.CommandText = query.ToString(); adapter.SelectCommand = cmd; (DbDataAdapter) adapter).Fill (dataSet, query.DataSetTable); It should be noticed that the input object query has included constructed SQL sentence.5 Application to a notif
47、ication system An application, known as notification system, is presented here. It utilizes the data access layer mentioned above. The system is an auto-notification and information collecting system which is used to collect and send information automatically in the cases of sudden events, such as d
48、isaster recovery and keeping transaction continuity. The principle of the system is shown in Fig. 3. The functions of the system includes informing the quick action department, dispatching the quick action group, updating the management system, forewarning and sending forewarning information in the
49、warning line, and sending messages and instructions. The application was developed on the .NET platform. The development language is C#. The DBMS is SQL Server 2000. The system was constructed based on B/S and UI was developed by ASP.NET. The N-tier architecture shown in Fig. 1 was adopted. Framework, which was used in the former system and proved correct and reliable, was directly imported to the system. With the framework sub-layer, the adoption of the data access layer simplifies the encapsulation
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 庇護(hù)工場(chǎng)安全管理制度
- 制定公司行政管理制度
- 公司銷售主管管理制度
- 農(nóng)村水路入戶管理制度
- 垃圾拖車人員管理制度
- 網(wǎng)絡(luò)性能優(yōu)化與管理題目及答案
- 小學(xué)節(jié)能評(píng)比管理制度
- 行政組織理論的復(fù)習(xí)策略試題及答案
- 南寧小學(xué)日常管理制度
- 公共數(shù)據(jù)應(yīng)用管理制度
- IATF16949-質(zhì)量手冊(cè)(過(guò)程方法無(wú)刪減版)
- 溝通的藝術(shù)學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 2023年九年級(jí)中考數(shù)學(xué)微專題+鉛垂法求三角形面積課件
- 企業(yè)級(jí)IPv6網(wǎng)絡(luò)改造及升級(jí)服務(wù)合同
- 甘肅省2023年中考語(yǔ)文現(xiàn)代文閱讀真題及答案
- 安徽省合肥市科大附中2025年第二次中考模擬初三數(shù)學(xué)試題試卷含解析
- 市政工程單位、分部、分項(xiàng)工程劃分方案
- 2024至2030年中國(guó)磁性元器件市場(chǎng)前景及投資發(fā)展戰(zhàn)略研究報(bào)告
- 人力資源服務(wù)派遣合同范本(2024版)
- 2025數(shù)學(xué)步步高大一輪復(fù)習(xí)講義人教A版復(fù)習(xí)講義含答案
- NBT-10781-2021空氣源熱泵污泥干化機(jī)
評(píng)論
0/150
提交評(píng)論