@dconley The most succinct way I can put it for identification in a sentence, is: "is the verb applied to the thing" (COD), or not (COI).
So, "I gave my sister the gift" => what is *being given*? => "the gift". That's the direct object, what the verb acts upon.
NB: In German, you'd use the Accusative case for it.
The indirect object would be the other element relevant to the verb's action, in this example the sister.
That's what German uses Dative case for.
And there is the "complément du nom", that German puts in Genitive case, for when the noun element you're considering relates to *another noun* and not to the verb.