mirror of
https://github.com/papers-we-love/papers-we-love.git
synced 2026-03-02 03:40:31 +00:00
2983 lines
203 KiB
Plaintext
2983 lines
203 KiB
Plaintext
|
|
%PDF-1.4
|
|||
|
|
5 0 obj
|
|||
|
|
<< /S /GoTo /D (chapter.1) >>
|
|||
|
|
endobj
|
|||
|
|
8 0 obj
|
|||
|
|
(1 Introduction)
|
|||
|
|
endobj
|
|||
|
|
9 0 obj
|
|||
|
|
<< /S /GoTo /D (chapter.2) >>
|
|||
|
|
endobj
|
|||
|
|
12 0 obj
|
|||
|
|
(2 Characteristics of Good APIs)
|
|||
|
|
endobj
|
|||
|
|
13 0 obj
|
|||
|
|
<< /S /GoTo /D (section.2.1) >>
|
|||
|
|
endobj
|
|||
|
|
16 0 obj
|
|||
|
|
(2.1 Easy to learn and memorize)
|
|||
|
|
endobj
|
|||
|
|
17 0 obj
|
|||
|
|
<< /S /GoTo /D (section.2.2) >>
|
|||
|
|
endobj
|
|||
|
|
20 0 obj
|
|||
|
|
(2.2 Leads to readable code)
|
|||
|
|
endobj
|
|||
|
|
21 0 obj
|
|||
|
|
<< /S /GoTo /D (section.2.3) >>
|
|||
|
|
endobj
|
|||
|
|
24 0 obj
|
|||
|
|
(2.3 Hard to misuse)
|
|||
|
|
endobj
|
|||
|
|
25 0 obj
|
|||
|
|
<< /S /GoTo /D (section.2.4) >>
|
|||
|
|
endobj
|
|||
|
|
28 0 obj
|
|||
|
|
(2.4 Easy to extend)
|
|||
|
|
endobj
|
|||
|
|
29 0 obj
|
|||
|
|
<< /S /GoTo /D (section.2.5) >>
|
|||
|
|
endobj
|
|||
|
|
32 0 obj
|
|||
|
|
(2.5 Complete)
|
|||
|
|
endobj
|
|||
|
|
33 0 obj
|
|||
|
|
<< /S /GoTo /D (chapter.3) >>
|
|||
|
|
endobj
|
|||
|
|
36 0 obj
|
|||
|
|
(3 The Design Process)
|
|||
|
|
endobj
|
|||
|
|
37 0 obj
|
|||
|
|
<< /S /GoTo /D (section.3.1) >>
|
|||
|
|
endobj
|
|||
|
|
40 0 obj
|
|||
|
|
(3.1 Know the requirements)
|
|||
|
|
endobj
|
|||
|
|
41 0 obj
|
|||
|
|
<< /S /GoTo /D (section.3.2) >>
|
|||
|
|
endobj
|
|||
|
|
44 0 obj
|
|||
|
|
(3.2 Write use cases before you write any other code)
|
|||
|
|
endobj
|
|||
|
|
45 0 obj
|
|||
|
|
<< /S /GoTo /D (section.3.3) >>
|
|||
|
|
endobj
|
|||
|
|
48 0 obj
|
|||
|
|
(3.3 Look for similar APIs in the same library)
|
|||
|
|
endobj
|
|||
|
|
49 0 obj
|
|||
|
|
<< /S /GoTo /D (section.3.4) >>
|
|||
|
|
endobj
|
|||
|
|
52 0 obj
|
|||
|
|
(3.4 Define the API before you implement it)
|
|||
|
|
endobj
|
|||
|
|
53 0 obj
|
|||
|
|
<< /S /GoTo /D (section.3.5) >>
|
|||
|
|
endobj
|
|||
|
|
56 0 obj
|
|||
|
|
(3.5 Have your peers review your API)
|
|||
|
|
endobj
|
|||
|
|
57 0 obj
|
|||
|
|
<< /S /GoTo /D (section.3.6) >>
|
|||
|
|
endobj
|
|||
|
|
60 0 obj
|
|||
|
|
(3.6 Write several examples against the API)
|
|||
|
|
endobj
|
|||
|
|
61 0 obj
|
|||
|
|
<< /S /GoTo /D (section.3.7) >>
|
|||
|
|
endobj
|
|||
|
|
64 0 obj
|
|||
|
|
(3.7 Prepare for extensions)
|
|||
|
|
endobj
|
|||
|
|
65 0 obj
|
|||
|
|
<< /S /GoTo /D (section.3.8) >>
|
|||
|
|
endobj
|
|||
|
|
68 0 obj
|
|||
|
|
(3.8 Don't publish internal APIs without review)
|
|||
|
|
endobj
|
|||
|
|
69 0 obj
|
|||
|
|
<< /S /GoTo /D (section.3.9) >>
|
|||
|
|
endobj
|
|||
|
|
72 0 obj
|
|||
|
|
(3.9 When in doubt, leave it out)
|
|||
|
|
endobj
|
|||
|
|
73 0 obj
|
|||
|
|
<< /S /GoTo /D (chapter.4) >>
|
|||
|
|
endobj
|
|||
|
|
76 0 obj
|
|||
|
|
(4 Design Guidelines)
|
|||
|
|
endobj
|
|||
|
|
77 0 obj
|
|||
|
|
<< /S /GoTo /D (section.4.1) >>
|
|||
|
|
endobj
|
|||
|
|
80 0 obj
|
|||
|
|
(4.1 Choose self-explanatory names and signatures)
|
|||
|
|
endobj
|
|||
|
|
81 0 obj
|
|||
|
|
<< /S /GoTo /D (section.4.2) >>
|
|||
|
|
endobj
|
|||
|
|
84 0 obj
|
|||
|
|
(4.2 Choose unambiguous names for related things)
|
|||
|
|
endobj
|
|||
|
|
85 0 obj
|
|||
|
|
<< /S /GoTo /D (section.4.3) >>
|
|||
|
|
endobj
|
|||
|
|
88 0 obj
|
|||
|
|
(4.3 Beware of false consistency)
|
|||
|
|
endobj
|
|||
|
|
89 0 obj
|
|||
|
|
<< /S /GoTo /D (section.4.4) >>
|
|||
|
|
endobj
|
|||
|
|
92 0 obj
|
|||
|
|
(4.4 Avoid abbreviations)
|
|||
|
|
endobj
|
|||
|
|
93 0 obj
|
|||
|
|
<< /S /GoTo /D (section.4.5) >>
|
|||
|
|
endobj
|
|||
|
|
96 0 obj
|
|||
|
|
(4.5 Prefer specific names to general names)
|
|||
|
|
endobj
|
|||
|
|
97 0 obj
|
|||
|
|
<< /S /GoTo /D (section.4.6) >>
|
|||
|
|
endobj
|
|||
|
|
100 0 obj
|
|||
|
|
(4.6 Don't be a slave of an underlying API's naming practices)
|
|||
|
|
endobj
|
|||
|
|
101 0 obj
|
|||
|
|
<< /S /GoTo /D (section.4.7) >>
|
|||
|
|
endobj
|
|||
|
|
104 0 obj
|
|||
|
|
(4.7 Choose good defaults)
|
|||
|
|
endobj
|
|||
|
|
105 0 obj
|
|||
|
|
<< /S /GoTo /D (section.4.8) >>
|
|||
|
|
endobj
|
|||
|
|
108 0 obj
|
|||
|
|
(4.8 Avoid making your APIs overly clever)
|
|||
|
|
endobj
|
|||
|
|
109 0 obj
|
|||
|
|
<< /S /GoTo /D (section.4.9) >>
|
|||
|
|
endobj
|
|||
|
|
112 0 obj
|
|||
|
|
(4.9 Pay attention to edge cases)
|
|||
|
|
endobj
|
|||
|
|
113 0 obj
|
|||
|
|
<< /S /GoTo /D (section.4.10) >>
|
|||
|
|
endobj
|
|||
|
|
116 0 obj
|
|||
|
|
(4.10 Be careful when defining virtual APIs)
|
|||
|
|
endobj
|
|||
|
|
117 0 obj
|
|||
|
|
<< /S /GoTo /D (section.4.11) >>
|
|||
|
|
endobj
|
|||
|
|
120 0 obj
|
|||
|
|
(4.11 Strive for property-based APIs)
|
|||
|
|
endobj
|
|||
|
|
121 0 obj
|
|||
|
|
<< /S /GoTo /D (section.4.12) >>
|
|||
|
|
endobj
|
|||
|
|
124 0 obj
|
|||
|
|
(4.12 The best API is no API)
|
|||
|
|
endobj
|
|||
|
|
125 0 obj
|
|||
|
|
<< /S /GoTo /D [126 0 R /Fit ] >>
|
|||
|
|
endobj
|
|||
|
|
128 0 obj <<
|
|||
|
|
/Length 294
|
|||
|
|
/Filter /FlateDecode
|
|||
|
|
>>
|
|||
|
|
stream
|
|||
|
|
x<EFBFBD>}Q<>N<EFBFBD>0<10><>.<13><0C>q<EFBFBD>GɊC<C98A> |